@fabasoad/sarif-to-slack 0.2.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yml +1 -1
- package/.github/workflows/security.yml +0 -1
- package/.github/workflows/send-sarif-to-slack.yml +145 -73
- package/.gitleaksignore +8 -0
- package/.pre-commit-config.yaml +3 -3
- package/.tool-versions +1 -1
- package/dist/Logger.js +4 -1
- package/dist/SarifToSlackClient.d.ts +33 -0
- package/dist/SarifToSlackClient.d.ts.map +1 -0
- package/dist/SarifToSlackClient.js +178 -0
- package/dist/SlackMessageBuilder.js +34 -82
- package/dist/System.d.ts +1 -3
- package/dist/System.d.ts.map +1 -1
- package/dist/System.js +10 -3
- package/dist/index.cjs +826 -472
- package/dist/index.d.ts +35 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -12
- package/dist/model/Color.d.ts +80 -0
- package/dist/model/Color.d.ts.map +1 -0
- package/dist/model/Color.js +106 -0
- package/dist/model/Finding.d.ts +2 -0
- package/dist/model/Finding.d.ts.map +1 -0
- package/dist/model/Finding.js +93 -0
- package/dist/model/FindingsArray.d.ts +2 -0
- package/dist/model/FindingsArray.d.ts.map +1 -0
- package/dist/model/FindingsArray.js +24 -0
- package/dist/processors/CodeQLProcessor.d.ts +2 -0
- package/dist/processors/CodeQLProcessor.d.ts.map +1 -0
- package/dist/processors/CodeQLProcessor.js +17 -0
- package/dist/processors/CommonProcessor.d.ts +2 -0
- package/dist/processors/CommonProcessor.d.ts.map +1 -0
- package/dist/processors/CommonProcessor.js +84 -0
- package/dist/processors/ProcessorFactory.d.ts +2 -0
- package/dist/processors/ProcessorFactory.d.ts.map +1 -0
- package/dist/processors/ProcessorFactory.js +22 -0
- package/dist/processors/SnykProcessor.d.ts +2 -0
- package/dist/processors/SnykProcessor.d.ts.map +1 -0
- package/dist/processors/SnykProcessor.js +18 -0
- package/dist/representations/CompactGroupByRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByRepresentation.js +58 -0
- package/dist/representations/CompactGroupByRunPerLevelRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByRunPerLevelRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByRunPerLevelRepresentation.js +13 -0
- package/dist/representations/CompactGroupByRunPerSeverityRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByRunPerSeverityRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByRunPerSeverityRepresentation.js +13 -0
- package/dist/representations/CompactGroupByRunRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByRunRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByRunRepresentation.js +39 -0
- package/dist/representations/CompactGroupBySarifPerLevelRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupBySarifPerLevelRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupBySarifPerLevelRepresentation.js +13 -0
- package/dist/representations/CompactGroupBySarifPerSeverityRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupBySarifPerSeverityRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupBySarifPerSeverityRepresentation.js +13 -0
- package/dist/representations/CompactGroupBySarifRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupBySarifRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupBySarifRepresentation.js +40 -0
- package/dist/representations/CompactGroupByToolNamePerLevelRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByToolNamePerLevelRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByToolNamePerLevelRepresentation.js +13 -0
- package/dist/representations/CompactGroupByToolNamePerSeverityRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByToolNamePerSeverityRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByToolNamePerSeverityRepresentation.js +13 -0
- package/dist/representations/CompactGroupByToolNameRepresentation.d.ts +2 -0
- package/dist/representations/CompactGroupByToolNameRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactGroupByToolNameRepresentation.js +39 -0
- package/dist/representations/CompactTotalPerLevelRepresentation.d.ts +2 -0
- package/dist/representations/CompactTotalPerLevelRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactTotalPerLevelRepresentation.js +13 -0
- package/dist/representations/CompactTotalPerSeverityRepresentation.d.ts +2 -0
- package/dist/representations/CompactTotalPerSeverityRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactTotalPerSeverityRepresentation.js +13 -0
- package/dist/representations/CompactTotalRepresentation.d.ts +2 -0
- package/dist/representations/CompactTotalRepresentation.d.ts.map +1 -0
- package/dist/representations/CompactTotalRepresentation.js +25 -0
- package/dist/representations/Representation.d.ts +2 -0
- package/dist/representations/Representation.d.ts.map +1 -0
- package/dist/representations/Representation.js +28 -0
- package/dist/representations/RepresentationFactory.d.ts +2 -0
- package/dist/representations/RepresentationFactory.d.ts.map +1 -0
- package/dist/representations/RepresentationFactory.js +37 -0
- package/dist/sarif-to-slack.d.ts +347 -85
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/types.d.ts +215 -51
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +225 -33
- package/dist/utils/Comparators.d.ts +2 -0
- package/dist/utils/Comparators.d.ts.map +1 -0
- package/dist/utils/Comparators.js +18 -0
- package/dist/utils/ExtendedArray.d.ts +2 -0
- package/dist/utils/ExtendedArray.d.ts.map +1 -0
- package/dist/utils/ExtendedArray.js +11 -0
- package/dist/utils/FileUtils.d.ts +2 -0
- package/dist/utils/FileUtils.d.ts.map +1 -0
- package/dist/utils/FileUtils.js +51 -0
- package/dist/utils/SarifUtils.js +20 -54
- package/etc/sarif-to-slack.api.md +162 -99
- package/jest.config.json +2 -2
- package/package.json +7 -7
- package/scripts/save-metadata.sh +12 -10
- package/src/Logger.ts +4 -0
- package/src/SarifToSlackClient.ts +202 -0
- package/src/SlackMessageBuilder.ts +35 -115
- package/src/System.ts +9 -2
- package/src/index.ts +47 -20
- package/src/model/Color.ts +195 -0
- package/src/model/Finding.ts +137 -0
- package/src/model/FindingsArray.ts +27 -0
- package/src/processors/CodeQLProcessor.ts +19 -0
- package/src/processors/CommonProcessor.ts +103 -0
- package/src/processors/ProcessorFactory.ts +23 -0
- package/src/processors/SnykProcessor.ts +19 -0
- package/src/representations/CompactGroupByRepresentation.ts +67 -0
- package/src/representations/CompactGroupByRunPerLevelRepresentation.ts +14 -0
- package/src/representations/CompactGroupByRunPerSeverityRepresentation.ts +14 -0
- package/src/representations/CompactGroupByRunRepresentation.ts +44 -0
- package/src/representations/CompactGroupBySarifPerLevelRepresentation.ts +15 -0
- package/src/representations/CompactGroupBySarifPerSeverityRepresentation.ts +15 -0
- package/src/representations/CompactGroupBySarifRepresentation.ts +45 -0
- package/src/representations/CompactGroupByToolNamePerLevelRepresentation.ts +15 -0
- package/src/representations/CompactGroupByToolNamePerSeverityRepresentation.ts +15 -0
- package/src/representations/CompactGroupByToolNameRepresentation.ts +44 -0
- package/src/representations/CompactTotalPerLevelRepresentation.ts +14 -0
- package/src/representations/CompactTotalPerSeverityRepresentation.ts +14 -0
- package/src/representations/CompactTotalRepresentation.ts +27 -0
- package/src/representations/Representation.ts +35 -0
- package/src/representations/RepresentationFactory.ts +49 -0
- package/src/types.ts +270 -53
- package/src/utils/Comparators.ts +19 -0
- package/src/utils/ExtendedArray.ts +11 -0
- package/src/utils/FileUtils.ts +60 -0
- package/src/utils/SarifUtils.ts +20 -72
- package/test-data/sarif/codeql-python.sarif +1448 -1
- package/test-data/sarif/codeql-typescript.sarif +3474 -1
- package/test-data/sarif/grype-github-actions.sarif +65 -0
- package/test-data/sarif/osv-scanner-composer.sarif +972 -0
- package/test-data/sarif/osv-scanner-container.sarif +2278 -0
- package/test-data/sarif/osv-scanner-gomodules.sarif +813 -0
- package/test-data/sarif/osv-scanner-hex.sarif +147 -0
- package/test-data/sarif/osv-scanner-maven.sarif +171 -0
- package/test-data/sarif/osv-scanner-npm.sarif +627 -0
- package/test-data/sarif/osv-scanner-pip.sarif +206 -0
- package/test-data/sarif/osv-scanner-pipenv.sarif +243 -0
- package/test-data/sarif/osv-scanner-pnpm.sarif +174 -0
- package/test-data/sarif/osv-scanner-poetry.sarif +1893 -0
- package/test-data/sarif/osv-scanner-rubygems.sarif +402 -0
- package/test-data/sarif/osv-scanner-uv.sarif +206 -0
- package/test-data/sarif/osv-scanner-yarn.sarif +5207 -0
- package/test-data/sarif/runs-0.sarif +5 -0
- package/test-data/sarif/runs-2-tools-2-results-0.sarif +1 -1
- package/test-data/sarif/runs-2-tools-2.sarif +1 -1
- package/test-data/sarif/runs-3-tools-2-results-0.sarif +1 -1
- package/test-data/sarif/runs-3-tools-2.sarif +1 -1
- package/test-data/sarif/tmp/codeql-csharp.sarif +1 -0
- package/test-data/sarif/tmp/grype-container.sarif +1774 -0
- package/test-data/sarif/tmp/runs-1-tools-1-results-0.sarif +18 -0
- package/test-data/sarif/tmp/runs-2-tools-2.sarif +686 -0
- package/test-data/sarif/trivy-iac.sarif +1 -1
- package/tests/integration/SendSarifToSlack.spec.ts +95 -27
- package/tsconfig.json +2 -0
- package/dist/Processors.d.ts +0 -2
- package/dist/Processors.d.ts.map +0 -1
- package/dist/Processors.js +0 -61
- package/dist/SarifToSlackService.d.ts +0 -39
- package/dist/SarifToSlackService.d.ts.map +0 -1
- package/dist/SarifToSlackService.js +0 -104
- package/dist/metadata.d.ts +0 -2
- package/dist/metadata.d.ts.map +0 -1
- package/dist/metadata.js +0 -11
- package/dist/model/SarifModelPerRun.d.ts +0 -2
- package/dist/model/SarifModelPerRun.d.ts.map +0 -1
- package/dist/model/SarifModelPerRun.js +0 -90
- package/dist/model/SarifModelPerSarif.d.ts +0 -2
- package/dist/model/SarifModelPerSarif.d.ts.map +0 -1
- package/dist/model/SarifModelPerSarif.js +0 -102
- package/dist/model/types.d.ts +0 -2
- package/dist/model/types.d.ts.map +0 -1
- package/dist/model/types.js +0 -49
- package/dist/utils/SortUtils.d.ts +0 -2
- package/dist/utils/SortUtils.d.ts.map +0 -1
- package/dist/utils/SortUtils.js +0 -20
- package/src/Processors.ts +0 -68
- package/src/SarifToSlackService.ts +0 -117
- package/src/metadata.ts +0 -10
- package/src/model/SarifModelPerRun.ts +0 -120
- package/src/model/SarifModelPerSarif.ts +0 -126
- package/src/model/types.ts +0 -50
- package/src/utils/SortUtils.ts +0 -33
- package/tests/Processors.spec.ts +0 -76
|
@@ -1 +1,1448 @@
|
|
|
1
|
-
{"$schema":"https://json.schemastore.org/sarif-2.1.0.json","version":"2.1.0","runs":[{"tool":{"driver":{"name":"CodeQL","organization":"GitHub","semanticVersion":"2.19.0","notifications":[{"id":"py/diagnostics/successfully-extracted-files","name":"py/diagnostics/successfully-extracted-files","shortDescription":{"text":"Extracted Python files"},"fullDescription":{"text":"Lists all Python files in the source code directory that were extracted."},"defaultConfiguration":{"enabled":true},"properties":{"tags":["successfully-extracted-files"],"description":"Lists all Python files in the source code directory that were extracted.","id":"py/diagnostics/successfully-extracted-files","kind":"diagnostic","name":"Extracted Python files"}},{"id":"py/diagnostics/extraction-warnings","name":"py/diagnostics/extraction-warnings","shortDescription":{"text":"Python extraction warnings"},"fullDescription":{"text":"List all extraction warnings for Python files in the source code directory."},"defaultConfiguration":{"enabled":true},"properties":{"description":"List all extraction warnings for Python files in the source code directory.","id":"py/diagnostics/extraction-warnings","kind":"diagnostic","name":"Python extraction warnings"}},{"id":"py/baseline/expected-extracted-files","name":"py/baseline/expected-extracted-files","shortDescription":{"text":"Expected extracted files"},"fullDescription":{"text":"Files appearing in the source archive that are expected to be extracted."},"defaultConfiguration":{"enabled":true},"properties":{"tags":["expected-extracted-files","telemetry"]}},{"id":"cli/sip-enablement","name":"cli/sip-enablement","shortDescription":{"text":"macOS SIP enablement status"},"fullDescription":{"text":"macOS SIP enablement status"},"defaultConfiguration":{"enabled":true}}],"rules":[{"id":"py/code-injection","name":"py/code-injection","shortDescription":{"text":"Code injection"},"fullDescription":{"text":"Interpreting unsanitized user input as code allows a malicious user to perform arbitrary code execution."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-094","external/cwe/cwe-095","external/cwe/cwe-116"],"description":"Interpreting unsanitized user input as code allows a malicious user to perform arbitrary\n code execution.","id":"py/code-injection","kind":"path-problem","name":"Code injection","precision":"high","problem.severity":"error","security-severity":"9.3","sub-severity":"high"}},{"id":"py/stack-trace-exposure","name":"py/stack-trace-exposure","shortDescription":{"text":"Information exposure through an exception"},"fullDescription":{"text":"Leaking information about an exception, such as messages and stack traces, to an external user can expose implementation details that are useful to an attacker for developing a subsequent exploit."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-209","external/cwe/cwe-497"],"description":"Leaking information about an exception, such as messages and stack traces, to an\n external user can expose implementation details that are useful to an attacker for\n developing a subsequent exploit.","id":"py/stack-trace-exposure","kind":"path-problem","name":"Information exposure through an exception","precision":"high","problem.severity":"error","security-severity":"5.4"}},{"id":"py/url-redirection","name":"py/url-redirection","shortDescription":{"text":"URL redirection from remote source"},"fullDescription":{"text":"URL redirection based on unvalidated user input may cause redirection to malicious web sites."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-601"],"description":"URL redirection based on unvalidated user input\n may cause redirection to malicious web sites.","id":"py/url-redirection","kind":"path-problem","name":"URL redirection from remote source","precision":"high","problem.severity":"error","security-severity":"6.1","sub-severity":"low"}},{"id":"py/weak-crypto-key","name":"py/weak-crypto-key","shortDescription":{"text":"Use of weak cryptographic key"},"fullDescription":{"text":"Use of a cryptographic key that is too small may allow the encryption to be broken."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-326"],"description":"Use of a cryptographic key that is too small may allow the encryption to be broken.","id":"py/weak-crypto-key","kind":"problem","name":"Use of weak cryptographic key","precision":"high","problem.severity":"error","security-severity":"7.5"}},{"id":"py/http-response-splitting","name":"py/http-response-splitting","shortDescription":{"text":"HTTP Response Splitting"},"fullDescription":{"text":"Writing user input directly to an HTTP header makes code vulnerable to attack by header splitting."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-113","external/cwe/cwe-079"],"description":"Writing user input directly to an HTTP header\n makes code vulnerable to attack by header splitting.","id":"py/http-response-splitting","kind":"path-problem","name":"HTTP Response Splitting","precision":"high","problem.severity":"error","security-severity":"6.1"}},{"id":"py/nosql-injection","name":"py/nosql-injection","shortDescription":{"text":"NoSQL Injection"},"fullDescription":{"text":"Building a NoSQL query from user-controlled sources is vulnerable to insertion of malicious NoSQL code by the user."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-943"],"description":"Building a NoSQL query from user-controlled sources is vulnerable to insertion of\n malicious NoSQL code by the user.","id":"py/nosql-injection","kind":"path-problem","name":"NoSQL Injection","precision":"high","problem.severity":"error","security-severity":"8.8"}},{"id":"py/insecure-default-protocol","name":"py/insecure-default-protocol","shortDescription":{"text":"Default version of SSL/TLS may be insecure"},"fullDescription":{"text":"Leaving the SSL/TLS version unspecified may result in an insecure default protocol being used."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-327"],"description":"Leaving the SSL/TLS version unspecified may result in an insecure\n default protocol being used.","id":"py/insecure-default-protocol","kind":"problem","name":"Default version of SSL/TLS may be insecure","precision":"high","problem.severity":"warning","security-severity":"7.5"}},{"id":"py/weak-cryptographic-algorithm","name":"py/weak-cryptographic-algorithm","shortDescription":{"text":"Use of a broken or weak cryptographic algorithm"},"fullDescription":{"text":"Using broken or weak cryptographic algorithms can compromise security."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-327"],"description":"Using broken or weak cryptographic algorithms can compromise security.","id":"py/weak-cryptographic-algorithm","kind":"problem","name":"Use of a broken or weak cryptographic algorithm","precision":"high","problem.severity":"warning","security-severity":"7.5"}},{"id":"py/insecure-protocol","name":"py/insecure-protocol","shortDescription":{"text":"Use of insecure SSL/TLS version"},"fullDescription":{"text":"Using an insecure SSL/TLS version may leave the connection vulnerable to attacks."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-327"],"description":"Using an insecure SSL/TLS version may leave the connection vulnerable to attacks.","id":"py/insecure-protocol","kind":"problem","name":"Use of insecure SSL/TLS version","precision":"high","problem.severity":"warning","security-severity":"7.5"}},{"id":"py/weak-sensitive-data-hashing","name":"py/weak-sensitive-data-hashing","shortDescription":{"text":"Use of a broken or weak cryptographic hashing algorithm on sensitive data"},"fullDescription":{"text":"Using broken or weak cryptographic hashing algorithms can compromise security."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-327","external/cwe/cwe-328","external/cwe/cwe-916"],"description":"Using broken or weak cryptographic hashing algorithms can compromise security.","id":"py/weak-sensitive-data-hashing","kind":"path-problem","name":"Use of a broken or weak cryptographic hashing algorithm on sensitive data","precision":"high","problem.severity":"warning","security-severity":"7.5"}},{"id":"py/full-ssrf","name":"py/full-ssrf","shortDescription":{"text":"Full server-side request forgery"},"fullDescription":{"text":"Making a network request to a URL that is fully user-controlled allows for request forgery attacks."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-918"],"description":"Making a network request to a URL that is fully user-controlled allows for request forgery attacks.","id":"py/full-ssrf","kind":"path-problem","name":"Full server-side request forgery","precision":"high","problem.severity":"error","security-severity":"9.1"}},{"id":"py/pam-auth-bypass","name":"py/pam-auth-bypass","shortDescription":{"text":"PAM authorization bypass due to incorrect usage"},"fullDescription":{"text":"Not using `pam_acct_mgmt` after `pam_authenticate` to check the validity of a login can lead to authorization bypass."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-285"],"description":"Not using `pam_acct_mgmt` after `pam_authenticate` to check the validity of a login can lead to authorization bypass.","id":"py/pam-auth-bypass","kind":"path-problem","name":"PAM authorization bypass due to incorrect usage","precision":"high","problem.severity":"warning","security-severity":"8.1"}},{"id":"py/insecure-cookie","name":"py/insecure-cookie","shortDescription":{"text":"Failure to use secure cookies"},"fullDescription":{"text":"Insecure cookies may be sent in cleartext, which makes them vulnerable to interception."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-614","external/cwe/cwe-1004","external/cwe/cwe-1275"],"description":"Insecure cookies may be sent in cleartext, which makes them vulnerable to\n interception.","id":"py/insecure-cookie","kind":"problem","name":"Failure to use secure cookies","precision":"high","problem.severity":"warning","security-severity":"5.0"}},{"id":"py/sql-injection","name":"py/sql-injection","shortDescription":{"text":"SQL query built from user-controlled sources"},"fullDescription":{"text":"Building a SQL query from user-controlled sources is vulnerable to insertion of malicious SQL code by the user."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-089"],"description":"Building a SQL query from user-controlled sources is vulnerable to insertion of\n malicious SQL code by the user.","id":"py/sql-injection","kind":"path-problem","name":"SQL query built from user-controlled sources","precision":"high","problem.severity":"error","security-severity":"8.8"}},{"id":"py/incomplete-hostname-regexp","name":"py/incomplete-hostname-regexp","shortDescription":{"text":"Incomplete regular expression for hostnames"},"fullDescription":{"text":"Matching a URL or hostname against a regular expression that contains an unescaped dot as part of the hostname might match more hostnames than expected."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["correctness","security","external/cwe/cwe-020"],"description":"Matching a URL or hostname against a regular expression that contains an unescaped dot as part of the hostname might match more hostnames than expected.","id":"py/incomplete-hostname-regexp","kind":"problem","name":"Incomplete regular expression for hostnames","precision":"high","problem.severity":"warning","security-severity":"7.8"}},{"id":"py/cookie-injection","name":"py/cookie-injection","shortDescription":{"text":"Construction of a cookie using user-supplied input"},"fullDescription":{"text":"Constructing cookies from user input may allow an attacker to perform a Cookie Poisoning attack."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-20"],"description":"Constructing cookies from user input may allow an attacker to perform a Cookie Poisoning attack.","id":"py/cookie-injection","kind":"path-problem","name":"Construction of a cookie using user-supplied input","precision":"high","problem.severity":"warning","security-severity":"5.0"}},{"id":"py/incomplete-url-substring-sanitization","name":"py/incomplete-url-substring-sanitization","shortDescription":{"text":"Incomplete URL substring sanitization"},"fullDescription":{"text":"Security checks on the substrings of an unparsed URL are often vulnerable to bypassing."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["correctness","security","external/cwe/cwe-20"],"description":"Security checks on the substrings of an unparsed URL are often vulnerable to bypassing.","id":"py/incomplete-url-substring-sanitization","kind":"problem","name":"Incomplete URL substring sanitization","precision":"high","problem.severity":"warning","security-severity":"7.8"}},{"id":"py/overly-large-range","name":"py/overly-large-range","shortDescription":{"text":"Overly permissive regular expression range"},"fullDescription":{"text":"Overly permissive regular expression ranges match a wider range of characters than intended. This may allow an attacker to bypass a filter or sanitizer."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["correctness","security","external/cwe/cwe-020"],"description":"Overly permissive regular expression ranges match a wider range of characters than intended.\n This may allow an attacker to bypass a filter or sanitizer.","id":"py/overly-large-range","kind":"problem","name":"Overly permissive regular expression range","precision":"high","problem.severity":"warning","security-severity":"5.0"}},{"id":"py/flask-debug","name":"py/flask-debug","shortDescription":{"text":"Flask app is run in debug mode"},"fullDescription":{"text":"Running a Flask app in debug mode may allow an attacker to run arbitrary code through the Werkzeug debugger."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-215","external/cwe/cwe-489"],"description":"Running a Flask app in debug mode may allow an attacker to run arbitrary code through the Werkzeug debugger.","id":"py/flask-debug","kind":"problem","name":"Flask app is run in debug mode","precision":"high","problem.severity":"error","security-severity":"7.5"}},{"id":"py/ldap-injection","name":"py/ldap-injection","shortDescription":{"text":"LDAP query built from user-controlled sources"},"fullDescription":{"text":"Building an LDAP query from user-controlled sources is vulnerable to insertion of malicious LDAP code by the user."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-090"],"description":"Building an LDAP query from user-controlled sources is vulnerable to insertion of\n malicious LDAP code by the user.","id":"py/ldap-injection","kind":"path-problem","name":"LDAP query built from user-controlled sources","precision":"high","problem.severity":"error","security-severity":"9.8"}},{"id":"py/bind-socket-all-network-interfaces","name":"py/bind-socket-all-network-interfaces","shortDescription":{"text":"Binding a socket to all network interfaces"},"fullDescription":{"text":"Binding a socket to all interfaces opens it up to traffic from any IPv4 address and is therefore associated with security risks."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-200"],"description":"Binding a socket to all interfaces opens it up to traffic from any IPv4 address\n and is therefore associated with security risks.","id":"py/bind-socket-all-network-interfaces","kind":"problem","name":"Binding a socket to all network interfaces","precision":"high","problem.severity":"error","security-severity":"6.5","sub-severity":"low"}},{"id":"py/paramiko-missing-host-key-validation","name":"py/paramiko-missing-host-key-validation","shortDescription":{"text":"Accepting unknown SSH host keys when using Paramiko"},"fullDescription":{"text":"Accepting unknown host keys can allow man-in-the-middle attacks."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-295"],"description":"Accepting unknown host keys can allow man-in-the-middle attacks.","id":"py/paramiko-missing-host-key-validation","kind":"problem","name":"Accepting unknown SSH host keys when using Paramiko","precision":"high","problem.severity":"error","security-severity":"7.5"}},{"id":"py/insecure-temporary-file","name":"py/insecure-temporary-file","shortDescription":{"text":"Insecure temporary file"},"fullDescription":{"text":"Creating a temporary file using this method may be insecure."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["external/cwe/cwe-377","security"],"description":"Creating a temporary file using this method may be insecure.","id":"py/insecure-temporary-file","kind":"problem","name":"Insecure temporary file","precision":"high","problem.severity":"error","security-severity":"7.0","sub-severity":"high"}},{"id":"py/bad-tag-filter","name":"py/bad-tag-filter","shortDescription":{"text":"Bad HTML filtering regexp"},"fullDescription":{"text":"Matching HTML tags using regular expressions is hard to do right, and can easily lead to security issues."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["correctness","security","external/cwe/cwe-116","external/cwe/cwe-020","external/cwe/cwe-185","external/cwe/cwe-186"],"description":"Matching HTML tags using regular expressions is hard to do right, and can easily lead to security issues.","id":"py/bad-tag-filter","kind":"problem","name":"Bad HTML filtering regexp","precision":"high","problem.severity":"warning","security-severity":"7.8"}},{"id":"py/xml-bomb","name":"py/xml-bomb","shortDescription":{"text":"XML internal entity expansion"},"fullDescription":{"text":"Parsing user input as an XML document with arbitrary internal entity expansion is vulnerable to denial-of-service attacks."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-776","external/cwe/cwe-400"],"description":"Parsing user input as an XML document with arbitrary internal\n entity expansion is vulnerable to denial-of-service attacks.","id":"py/xml-bomb","kind":"path-problem","name":"XML internal entity expansion","precision":"high","problem.severity":"warning","security-severity":"7.5"}},{"id":"py/clear-text-storage-sensitive-data","name":"py/clear-text-storage-sensitive-data","shortDescription":{"text":"Clear-text storage of sensitive information"},"fullDescription":{"text":"Sensitive information stored without encryption or hashing can expose it to an attacker."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-312","external/cwe/cwe-315","external/cwe/cwe-359"],"description":"Sensitive information stored without encryption or hashing can expose it to an\n attacker.","id":"py/clear-text-storage-sensitive-data","kind":"path-problem","name":"Clear-text storage of sensitive information","precision":"high","problem.severity":"error","security-severity":"7.5"}},{"id":"py/clear-text-logging-sensitive-data","name":"py/clear-text-logging-sensitive-data","shortDescription":{"text":"Clear-text logging of sensitive information"},"fullDescription":{"text":"Logging sensitive information without encryption or hashing can expose it to an attacker."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-312","external/cwe/cwe-359","external/cwe/cwe-532"],"description":"Logging sensitive information without encryption or hashing can\n expose it to an attacker.","id":"py/clear-text-logging-sensitive-data","kind":"path-problem","name":"Clear-text logging of sensitive information","precision":"high","problem.severity":"error","security-severity":"7.5"}},{"id":"py/csrf-protection-disabled","name":"py/csrf-protection-disabled","shortDescription":{"text":"CSRF protection weakened or disabled"},"fullDescription":{"text":"Disabling or weakening CSRF protection may make the application vulnerable to a Cross-Site Request Forgery (CSRF) attack."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-352"],"description":"Disabling or weakening CSRF protection may make the application\n vulnerable to a Cross-Site Request Forgery (CSRF) attack.","id":"py/csrf-protection-disabled","kind":"problem","name":"CSRF protection weakened or disabled","precision":"high","problem.severity":"warning","security-severity":"8.8"}},{"id":"py/unsafe-deserialization","name":"py/unsafe-deserialization","shortDescription":{"text":"Deserialization of user-controlled data"},"fullDescription":{"text":"Deserializing user-controlled data may allow attackers to execute arbitrary code."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["external/cwe/cwe-502","security","serialization"],"description":"Deserializing user-controlled data may allow attackers to execute arbitrary code.","id":"py/unsafe-deserialization","kind":"path-problem","name":"Deserialization of user-controlled data","precision":"high","problem.severity":"error","security-severity":"9.8","sub-severity":"high"}},{"id":"py/regex-injection","name":"py/regex-injection","shortDescription":{"text":"Regular expression injection"},"fullDescription":{"text":"User input should not be used in regular expressions without first being escaped, otherwise a malicious user may be able to inject an expression that could require exponential time on certain inputs."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-730","external/cwe/cwe-400"],"description":"User input should not be used in regular expressions without first being escaped,\n otherwise a malicious user may be able to inject an expression that could require\n exponential time on certain inputs.","id":"py/regex-injection","kind":"path-problem","name":"Regular expression injection","precision":"high","problem.severity":"error","security-severity":"7.5"}},{"id":"py/redos","name":"py/redos","shortDescription":{"text":"Inefficient regular expression"},"fullDescription":{"text":"A regular expression that requires exponential time to match certain inputs can be a performance bottleneck, and may be vulnerable to denial-of-service attacks."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-1333","external/cwe/cwe-730","external/cwe/cwe-400"],"description":"A regular expression that requires exponential time to match certain inputs\n can be a performance bottleneck, and may be vulnerable to denial-of-service\n attacks.","id":"py/redos","kind":"problem","name":"Inefficient regular expression","precision":"high","problem.severity":"error","security-severity":"7.5"}},{"id":"py/polynomial-redos","name":"py/polynomial-redos","shortDescription":{"text":"Polynomial regular expression used on uncontrolled data"},"fullDescription":{"text":"A regular expression that can require polynomial time to match may be vulnerable to denial-of-service attacks."},"defaultConfiguration":{"enabled":true,"level":"warning"},"properties":{"tags":["security","external/cwe/cwe-1333","external/cwe/cwe-730","external/cwe/cwe-400"],"description":"A regular expression that can require polynomial time\n to match may be vulnerable to denial-of-service attacks.","id":"py/polynomial-redos","kind":"path-problem","name":"Polynomial regular expression used on uncontrolled data","precision":"high","problem.severity":"warning","security-severity":"7.5"}},{"id":"py/path-injection","name":"py/path-injection","shortDescription":{"text":"Uncontrolled data used in path expression"},"fullDescription":{"text":"Accessing paths influenced by users can allow an attacker to access unexpected resources."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["correctness","security","external/cwe/cwe-022","external/cwe/cwe-023","external/cwe/cwe-036","external/cwe/cwe-073","external/cwe/cwe-099"],"description":"Accessing paths influenced by users can allow an attacker to access unexpected resources.","id":"py/path-injection","kind":"path-problem","name":"Uncontrolled data used in path expression","precision":"high","problem.severity":"error","security-severity":"7.5","sub-severity":"high"}},{"id":"py/xxe","name":"py/xxe","shortDescription":{"text":"XML external entity expansion"},"fullDescription":{"text":"Parsing user input as an XML document with external entity expansion is vulnerable to XXE attacks."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-611","external/cwe/cwe-827"],"description":"Parsing user input as an XML document with external\n entity expansion is vulnerable to XXE attacks.","id":"py/xxe","kind":"path-problem","name":"XML external entity expansion","precision":"high","problem.severity":"error","security-severity":"9.1"}},{"id":"py/command-line-injection","name":"py/command-line-injection","shortDescription":{"text":"Uncontrolled command line"},"fullDescription":{"text":"Using externally controlled strings in a command line may allow a malicious user to change the meaning of the command."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["correctness","security","external/cwe/cwe-078","external/cwe/cwe-088"],"description":"Using externally controlled strings in a command line may allow a malicious\n user to change the meaning of the command.","id":"py/command-line-injection","kind":"path-problem","name":"Uncontrolled command line","precision":"high","problem.severity":"error","security-severity":"9.8","sub-severity":"high"}},{"id":"py/xpath-injection","name":"py/xpath-injection","shortDescription":{"text":"XPath query built from user-controlled sources"},"fullDescription":{"text":"Building a XPath query from user-controlled sources is vulnerable to insertion of malicious Xpath code by the user."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-643"],"description":"Building a XPath query from user-controlled sources is vulnerable to insertion of\n malicious Xpath code by the user.","id":"py/xpath-injection","kind":"path-problem","name":"XPath query built from user-controlled sources","precision":"high","problem.severity":"error","security-severity":"9.8"}},{"id":"py/reflective-xss","name":"py/reflective-xss","shortDescription":{"text":"Reflected server-side cross-site scripting"},"fullDescription":{"text":"Writing user input directly to a web page allows for a cross-site scripting vulnerability."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","external/cwe/cwe-079","external/cwe/cwe-116"],"description":"Writing user input directly to a web page\n allows for a cross-site scripting vulnerability.","id":"py/reflective-xss","kind":"path-problem","name":"Reflected server-side cross-site scripting","precision":"high","problem.severity":"error","security-severity":"6.1","sub-severity":"high"}},{"id":"py/use-of-input","name":"py/use-of-input","shortDescription":{"text":"'input' function used in Python 2"},"fullDescription":{"text":"The built-in function 'input' is used which, in Python 2, can allow arbitrary code to be run."},"defaultConfiguration":{"enabled":true,"level":"error"},"properties":{"tags":["security","correctness","security/cwe/cwe-94","security/cwe/cwe-95"],"description":"The built-in function 'input' is used which, in Python 2, can allow arbitrary code to be run.","id":"py/use-of-input","kind":"problem","name":"'input' function used in Python 2","precision":"high","problem.severity":"error","security-severity":"9.8","sub-severity":"high"}},{"id":"py/summary/lines-of-code","name":"py/summary/lines-of-code","shortDescription":{"text":"Total lines of Python code in the database"},"fullDescription":{"text":"The total number of lines of Python code across all files, including external libraries and auto-generated files. This is a useful metric of the size of a database. This query counts the lines of code, excluding whitespace or comments."},"defaultConfiguration":{"enabled":true},"properties":{"tags":["summary","telemetry"],"description":"The total number of lines of Python code across all files, including\n external libraries and auto-generated files. This is a useful metric of the size of a\n database. This query counts the lines of code, excluding whitespace or comments.","id":"py/summary/lines-of-code","kind":"metric","name":"Total lines of Python code in the database"}},{"id":"py/summary/lines-of-user-code","name":"py/summary/lines-of-user-code","shortDescription":{"text":"Total lines of user written Python code in the database"},"fullDescription":{"text":"The total number of lines of Python code from the source code directory, excluding auto-generated files. This query counts the lines of code, excluding whitespace or comments. Note: If external libraries are included in the codebase either in a checked-in virtual environment or as vendored code, that will currently be counted as user written code."},"defaultConfiguration":{"enabled":true},"properties":{"tags":["summary","lines-of-code","debug"],"description":"The total number of lines of Python code from the source code directory,\n excluding auto-generated files. This query counts the lines of code, excluding\n whitespace or comments. Note: If external libraries are included in the codebase\n either in a checked-in virtual environment or as vendored code, that will currently\n be counted as user written code.","id":"py/summary/lines-of-user-code","kind":"metric","name":"Total lines of user written Python code in the database"}}]},"extensions":[{"name":"codeql/python-queries","semanticVersion":"1.2.2+e99d7db428fc3981c9a1f03f03a024ac40e52f54","locations":[{"uri":"file:///Users/john.doe/.local/bin/codeql/qlpacks/codeql/python-queries/1.2.2/","description":{"text":"The QL pack root directory."},"properties":{"tags":["CodeQL/LocalPackRoot"]}},{"uri":"file:///Users/john.doe/.local/bin/codeql/qlpacks/codeql/python-queries/1.2.2/qlpack.yml","description":{"text":"The QL pack definition file."},"properties":{"tags":["CodeQL/LocalPackDefinitionFile"]}}]},{"name":"codeql/python-all","semanticVersion":"2.0.0+e99d7db428fc3981c9a1f03f03a024ac40e52f54","locations":[{"uri":"file:///Users/john.doe/.local/bin/codeql/qlpacks/codeql/python-queries/1.2.2/.codeql/libraries/codeql/python-all/2.0.0/","description":{"text":"The QL pack root directory."},"properties":{"tags":["CodeQL/LocalPackRoot"]}},{"uri":"file:///Users/john.doe/.local/bin/codeql/qlpacks/codeql/python-queries/1.2.2/.codeql/libraries/codeql/python-all/2.0.0/qlpack.yml","description":{"text":"The QL pack definition file."},"properties":{"tags":["CodeQL/LocalPackDefinitionFile"]}}]}]},"invocations":[{"toolExecutionNotifications":[{"locations":[{"physicalLocation":{"artifactLocation":{"uri":"script.py","uriBaseId":"%SRCROOT%","index":0}}}],"message":{"text":""},"level":"none","descriptor":{"id":"py/diagnostics/successfully-extracted-files","index":0},"properties":{"formattedMessage":{"text":""}}},{"locations":[{"physicalLocation":{"artifactLocation":{"uri":".codeql-db/codeql-database.yml","uriBaseId":"%SRCROOT%","index":1}}}],"message":{"text":""},"level":"none","descriptor":{"id":"py/diagnostics/successfully-extracted-files","index":0},"properties":{"formattedMessage":{"text":""}}},{"locations":[{"physicalLocation":{"artifactLocation":{"uri":"script.py","uriBaseId":"%SRCROOT%","index":0}}}],"message":{"text":""},"level":"none","descriptor":{"id":"py/baseline/expected-extracted-files","index":2},"properties":{"formattedMessage":{"text":""}}},{"message":{"text":""},"level":"note","timeUtc":"2025-05-09T08:10:22.071+00:00","descriptor":{"id":"cli/sip-enablement","index":3},"properties":{"attributes":{"isEnabled":true},"visibility":{"statusPage":false,"telemetry":true}}}],"executionSuccessful":true}],"artifacts":[{"location":{"uri":"script.py","uriBaseId":"%SRCROOT%","index":0}},{"location":{"uri":".codeql-db/codeql-database.yml","uriBaseId":"%SRCROOT%","index":1}}],"results":[{"ruleId":"py/bind-socket-all-network-interfaces","ruleIndex":20,"rule":{"id":"py/bind-socket-all-network-interfaces","index":20},"message":{"text":"'0.0.0.0' binds a socket to all interfaces."},"locations":[{"physicalLocation":{"artifactLocation":{"uri":"script.py","uriBaseId":"%SRCROOT%","index":0},"region":{"startLine":6,"endColumn":27}}}],"partialFingerprints":{"primaryLocationLineHash":"5e7a4c3f4c46a812:1","primaryLocationStartColumnFingerprint":"0"}}],"columnKind":"unicodeCodePoints","properties":{"semmle.formatSpecifier":"sarifv2.1.0","metricResults":[{"rule":{"id":"py/summary/lines-of-code","index":38},"ruleId":"py/summary/lines-of-code","ruleIndex":38,"value":121874},{"rule":{"id":"py/summary/lines-of-user-code","index":39},"ruleId":"py/summary/lines-of-user-code","ruleIndex":39,"value":3,"baseline":3}]}}]}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/sarif-2.1.0.json",
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"runs": [
|
|
5
|
+
{
|
|
6
|
+
"tool": {
|
|
7
|
+
"driver": {
|
|
8
|
+
"name": "CodeQL",
|
|
9
|
+
"organization": "GitHub",
|
|
10
|
+
"semanticVersion": "2.19.0",
|
|
11
|
+
"notifications": [
|
|
12
|
+
{
|
|
13
|
+
"id": "py/diagnostics/successfully-extracted-files",
|
|
14
|
+
"name": "py/diagnostics/successfully-extracted-files",
|
|
15
|
+
"shortDescription": {
|
|
16
|
+
"text": "Extracted Python files"
|
|
17
|
+
},
|
|
18
|
+
"fullDescription": {
|
|
19
|
+
"text": "Lists all Python files in the source code directory that were extracted."
|
|
20
|
+
},
|
|
21
|
+
"defaultConfiguration": {
|
|
22
|
+
"enabled": true
|
|
23
|
+
},
|
|
24
|
+
"properties": {
|
|
25
|
+
"tags": [
|
|
26
|
+
"successfully-extracted-files"
|
|
27
|
+
],
|
|
28
|
+
"description": "Lists all Python files in the source code directory that were extracted.",
|
|
29
|
+
"id": "py/diagnostics/successfully-extracted-files",
|
|
30
|
+
"kind": "diagnostic",
|
|
31
|
+
"name": "Extracted Python files"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "py/diagnostics/extraction-warnings",
|
|
36
|
+
"name": "py/diagnostics/extraction-warnings",
|
|
37
|
+
"shortDescription": {
|
|
38
|
+
"text": "Python extraction warnings"
|
|
39
|
+
},
|
|
40
|
+
"fullDescription": {
|
|
41
|
+
"text": "List all extraction warnings for Python files in the source code directory."
|
|
42
|
+
},
|
|
43
|
+
"defaultConfiguration": {
|
|
44
|
+
"enabled": true
|
|
45
|
+
},
|
|
46
|
+
"properties": {
|
|
47
|
+
"description": "List all extraction warnings for Python files in the source code directory.",
|
|
48
|
+
"id": "py/diagnostics/extraction-warnings",
|
|
49
|
+
"kind": "diagnostic",
|
|
50
|
+
"name": "Python extraction warnings"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "py/baseline/expected-extracted-files",
|
|
55
|
+
"name": "py/baseline/expected-extracted-files",
|
|
56
|
+
"shortDescription": {
|
|
57
|
+
"text": "Expected extracted files"
|
|
58
|
+
},
|
|
59
|
+
"fullDescription": {
|
|
60
|
+
"text": "Files appearing in the source archive that are expected to be extracted."
|
|
61
|
+
},
|
|
62
|
+
"defaultConfiguration": {
|
|
63
|
+
"enabled": true
|
|
64
|
+
},
|
|
65
|
+
"properties": {
|
|
66
|
+
"tags": [
|
|
67
|
+
"expected-extracted-files",
|
|
68
|
+
"telemetry"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "cli/sip-enablement",
|
|
74
|
+
"name": "cli/sip-enablement",
|
|
75
|
+
"shortDescription": {
|
|
76
|
+
"text": "macOS SIP enablement status"
|
|
77
|
+
},
|
|
78
|
+
"fullDescription": {
|
|
79
|
+
"text": "macOS SIP enablement status"
|
|
80
|
+
},
|
|
81
|
+
"defaultConfiguration": {
|
|
82
|
+
"enabled": true
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"rules": [
|
|
87
|
+
{
|
|
88
|
+
"id": "py/code-injection",
|
|
89
|
+
"name": "py/code-injection",
|
|
90
|
+
"shortDescription": {
|
|
91
|
+
"text": "Code injection"
|
|
92
|
+
},
|
|
93
|
+
"fullDescription": {
|
|
94
|
+
"text": "Interpreting unsanitized user input as code allows a malicious user to perform arbitrary code execution."
|
|
95
|
+
},
|
|
96
|
+
"defaultConfiguration": {
|
|
97
|
+
"enabled": true,
|
|
98
|
+
"level": "error"
|
|
99
|
+
},
|
|
100
|
+
"properties": {
|
|
101
|
+
"tags": [
|
|
102
|
+
"security",
|
|
103
|
+
"external/cwe/cwe-094",
|
|
104
|
+
"external/cwe/cwe-095",
|
|
105
|
+
"external/cwe/cwe-116"
|
|
106
|
+
],
|
|
107
|
+
"description": "Interpreting unsanitized user input as code allows a malicious user to perform arbitrary\n code execution.",
|
|
108
|
+
"id": "py/code-injection",
|
|
109
|
+
"kind": "path-problem",
|
|
110
|
+
"name": "Code injection",
|
|
111
|
+
"precision": "high",
|
|
112
|
+
"problem.severity": "error",
|
|
113
|
+
"security-severity": "9.3",
|
|
114
|
+
"sub-severity": "high"
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "py/stack-trace-exposure",
|
|
119
|
+
"name": "py/stack-trace-exposure",
|
|
120
|
+
"shortDescription": {
|
|
121
|
+
"text": "Information exposure through an exception"
|
|
122
|
+
},
|
|
123
|
+
"fullDescription": {
|
|
124
|
+
"text": "Leaking information about an exception, such as messages and stack traces, to an external user can expose implementation details that are useful to an attacker for developing a subsequent exploit."
|
|
125
|
+
},
|
|
126
|
+
"defaultConfiguration": {
|
|
127
|
+
"enabled": true,
|
|
128
|
+
"level": "error"
|
|
129
|
+
},
|
|
130
|
+
"properties": {
|
|
131
|
+
"tags": [
|
|
132
|
+
"security",
|
|
133
|
+
"external/cwe/cwe-209",
|
|
134
|
+
"external/cwe/cwe-497"
|
|
135
|
+
],
|
|
136
|
+
"description": "Leaking information about an exception, such as messages and stack traces, to an\n external user can expose implementation details that are useful to an attacker for\n developing a subsequent exploit.",
|
|
137
|
+
"id": "py/stack-trace-exposure",
|
|
138
|
+
"kind": "path-problem",
|
|
139
|
+
"name": "Information exposure through an exception",
|
|
140
|
+
"precision": "high",
|
|
141
|
+
"problem.severity": "error",
|
|
142
|
+
"security-severity": "5.4"
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"id": "py/url-redirection",
|
|
147
|
+
"name": "py/url-redirection",
|
|
148
|
+
"shortDescription": {
|
|
149
|
+
"text": "URL redirection from remote source"
|
|
150
|
+
},
|
|
151
|
+
"fullDescription": {
|
|
152
|
+
"text": "URL redirection based on unvalidated user input may cause redirection to malicious web sites."
|
|
153
|
+
},
|
|
154
|
+
"defaultConfiguration": {
|
|
155
|
+
"enabled": true,
|
|
156
|
+
"level": "error"
|
|
157
|
+
},
|
|
158
|
+
"properties": {
|
|
159
|
+
"tags": [
|
|
160
|
+
"security",
|
|
161
|
+
"external/cwe/cwe-601"
|
|
162
|
+
],
|
|
163
|
+
"description": "URL redirection based on unvalidated user input\n may cause redirection to malicious web sites.",
|
|
164
|
+
"id": "py/url-redirection",
|
|
165
|
+
"kind": "path-problem",
|
|
166
|
+
"name": "URL redirection from remote source",
|
|
167
|
+
"precision": "high",
|
|
168
|
+
"problem.severity": "error",
|
|
169
|
+
"security-severity": "6.1",
|
|
170
|
+
"sub-severity": "low"
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"id": "py/weak-crypto-key",
|
|
175
|
+
"name": "py/weak-crypto-key",
|
|
176
|
+
"shortDescription": {
|
|
177
|
+
"text": "Use of weak cryptographic key"
|
|
178
|
+
},
|
|
179
|
+
"fullDescription": {
|
|
180
|
+
"text": "Use of a cryptographic key that is too small may allow the encryption to be broken."
|
|
181
|
+
},
|
|
182
|
+
"defaultConfiguration": {
|
|
183
|
+
"enabled": true,
|
|
184
|
+
"level": "error"
|
|
185
|
+
},
|
|
186
|
+
"properties": {
|
|
187
|
+
"tags": [
|
|
188
|
+
"security",
|
|
189
|
+
"external/cwe/cwe-326"
|
|
190
|
+
],
|
|
191
|
+
"description": "Use of a cryptographic key that is too small may allow the encryption to be broken.",
|
|
192
|
+
"id": "py/weak-crypto-key",
|
|
193
|
+
"kind": "problem",
|
|
194
|
+
"name": "Use of weak cryptographic key",
|
|
195
|
+
"precision": "high",
|
|
196
|
+
"problem.severity": "error",
|
|
197
|
+
"security-severity": "7.5"
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
"id": "py/http-response-splitting",
|
|
202
|
+
"name": "py/http-response-splitting",
|
|
203
|
+
"shortDescription": {
|
|
204
|
+
"text": "HTTP Response Splitting"
|
|
205
|
+
},
|
|
206
|
+
"fullDescription": {
|
|
207
|
+
"text": "Writing user input directly to an HTTP header makes code vulnerable to attack by header splitting."
|
|
208
|
+
},
|
|
209
|
+
"defaultConfiguration": {
|
|
210
|
+
"enabled": true,
|
|
211
|
+
"level": "error"
|
|
212
|
+
},
|
|
213
|
+
"properties": {
|
|
214
|
+
"tags": [
|
|
215
|
+
"security",
|
|
216
|
+
"external/cwe/cwe-113",
|
|
217
|
+
"external/cwe/cwe-079"
|
|
218
|
+
],
|
|
219
|
+
"description": "Writing user input directly to an HTTP header\n makes code vulnerable to attack by header splitting.",
|
|
220
|
+
"id": "py/http-response-splitting",
|
|
221
|
+
"kind": "path-problem",
|
|
222
|
+
"name": "HTTP Response Splitting",
|
|
223
|
+
"precision": "high",
|
|
224
|
+
"problem.severity": "error",
|
|
225
|
+
"security-severity": "6.1"
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"id": "py/nosql-injection",
|
|
230
|
+
"name": "py/nosql-injection",
|
|
231
|
+
"shortDescription": {
|
|
232
|
+
"text": "NoSQL Injection"
|
|
233
|
+
},
|
|
234
|
+
"fullDescription": {
|
|
235
|
+
"text": "Building a NoSQL query from user-controlled sources is vulnerable to insertion of malicious NoSQL code by the user."
|
|
236
|
+
},
|
|
237
|
+
"defaultConfiguration": {
|
|
238
|
+
"enabled": true,
|
|
239
|
+
"level": "error"
|
|
240
|
+
},
|
|
241
|
+
"properties": {
|
|
242
|
+
"tags": [
|
|
243
|
+
"security",
|
|
244
|
+
"external/cwe/cwe-943"
|
|
245
|
+
],
|
|
246
|
+
"description": "Building a NoSQL query from user-controlled sources is vulnerable to insertion of\n malicious NoSQL code by the user.",
|
|
247
|
+
"id": "py/nosql-injection",
|
|
248
|
+
"kind": "path-problem",
|
|
249
|
+
"name": "NoSQL Injection",
|
|
250
|
+
"precision": "high",
|
|
251
|
+
"problem.severity": "error",
|
|
252
|
+
"security-severity": "8.8"
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"id": "py/insecure-default-protocol",
|
|
257
|
+
"name": "py/insecure-default-protocol",
|
|
258
|
+
"shortDescription": {
|
|
259
|
+
"text": "Default version of SSL/TLS may be insecure"
|
|
260
|
+
},
|
|
261
|
+
"fullDescription": {
|
|
262
|
+
"text": "Leaving the SSL/TLS version unspecified may result in an insecure default protocol being used."
|
|
263
|
+
},
|
|
264
|
+
"defaultConfiguration": {
|
|
265
|
+
"enabled": true,
|
|
266
|
+
"level": "warning"
|
|
267
|
+
},
|
|
268
|
+
"properties": {
|
|
269
|
+
"tags": [
|
|
270
|
+
"security",
|
|
271
|
+
"external/cwe/cwe-327"
|
|
272
|
+
],
|
|
273
|
+
"description": "Leaving the SSL/TLS version unspecified may result in an insecure\n default protocol being used.",
|
|
274
|
+
"id": "py/insecure-default-protocol",
|
|
275
|
+
"kind": "problem",
|
|
276
|
+
"name": "Default version of SSL/TLS may be insecure",
|
|
277
|
+
"precision": "high",
|
|
278
|
+
"problem.severity": "warning",
|
|
279
|
+
"security-severity": "7.5"
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"id": "py/weak-cryptographic-algorithm",
|
|
284
|
+
"name": "py/weak-cryptographic-algorithm",
|
|
285
|
+
"shortDescription": {
|
|
286
|
+
"text": "Use of a broken or weak cryptographic algorithm"
|
|
287
|
+
},
|
|
288
|
+
"fullDescription": {
|
|
289
|
+
"text": "Using broken or weak cryptographic algorithms can compromise security."
|
|
290
|
+
},
|
|
291
|
+
"defaultConfiguration": {
|
|
292
|
+
"enabled": true,
|
|
293
|
+
"level": "warning"
|
|
294
|
+
},
|
|
295
|
+
"properties": {
|
|
296
|
+
"tags": [
|
|
297
|
+
"security",
|
|
298
|
+
"external/cwe/cwe-327"
|
|
299
|
+
],
|
|
300
|
+
"description": "Using broken or weak cryptographic algorithms can compromise security.",
|
|
301
|
+
"id": "py/weak-cryptographic-algorithm",
|
|
302
|
+
"kind": "problem",
|
|
303
|
+
"name": "Use of a broken or weak cryptographic algorithm",
|
|
304
|
+
"precision": "high",
|
|
305
|
+
"problem.severity": "warning",
|
|
306
|
+
"security-severity": "7.5"
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"id": "py/insecure-protocol",
|
|
311
|
+
"name": "py/insecure-protocol",
|
|
312
|
+
"shortDescription": {
|
|
313
|
+
"text": "Use of insecure SSL/TLS version"
|
|
314
|
+
},
|
|
315
|
+
"fullDescription": {
|
|
316
|
+
"text": "Using an insecure SSL/TLS version may leave the connection vulnerable to attacks."
|
|
317
|
+
},
|
|
318
|
+
"defaultConfiguration": {
|
|
319
|
+
"enabled": true,
|
|
320
|
+
"level": "warning"
|
|
321
|
+
},
|
|
322
|
+
"properties": {
|
|
323
|
+
"tags": [
|
|
324
|
+
"security",
|
|
325
|
+
"external/cwe/cwe-327"
|
|
326
|
+
],
|
|
327
|
+
"description": "Using an insecure SSL/TLS version may leave the connection vulnerable to attacks.",
|
|
328
|
+
"id": "py/insecure-protocol",
|
|
329
|
+
"kind": "problem",
|
|
330
|
+
"name": "Use of insecure SSL/TLS version",
|
|
331
|
+
"precision": "high",
|
|
332
|
+
"problem.severity": "warning",
|
|
333
|
+
"security-severity": "7.5"
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"id": "py/weak-sensitive-data-hashing",
|
|
338
|
+
"name": "py/weak-sensitive-data-hashing",
|
|
339
|
+
"shortDescription": {
|
|
340
|
+
"text": "Use of a broken or weak cryptographic hashing algorithm on sensitive data"
|
|
341
|
+
},
|
|
342
|
+
"fullDescription": {
|
|
343
|
+
"text": "Using broken or weak cryptographic hashing algorithms can compromise security."
|
|
344
|
+
},
|
|
345
|
+
"defaultConfiguration": {
|
|
346
|
+
"enabled": true,
|
|
347
|
+
"level": "warning"
|
|
348
|
+
},
|
|
349
|
+
"properties": {
|
|
350
|
+
"tags": [
|
|
351
|
+
"security",
|
|
352
|
+
"external/cwe/cwe-327",
|
|
353
|
+
"external/cwe/cwe-328",
|
|
354
|
+
"external/cwe/cwe-916"
|
|
355
|
+
],
|
|
356
|
+
"description": "Using broken or weak cryptographic hashing algorithms can compromise security.",
|
|
357
|
+
"id": "py/weak-sensitive-data-hashing",
|
|
358
|
+
"kind": "path-problem",
|
|
359
|
+
"name": "Use of a broken or weak cryptographic hashing algorithm on sensitive data",
|
|
360
|
+
"precision": "high",
|
|
361
|
+
"problem.severity": "warning",
|
|
362
|
+
"security-severity": "7.5"
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"id": "py/full-ssrf",
|
|
367
|
+
"name": "py/full-ssrf",
|
|
368
|
+
"shortDescription": {
|
|
369
|
+
"text": "Full server-side request forgery"
|
|
370
|
+
},
|
|
371
|
+
"fullDescription": {
|
|
372
|
+
"text": "Making a network request to a URL that is fully user-controlled allows for request forgery attacks."
|
|
373
|
+
},
|
|
374
|
+
"defaultConfiguration": {
|
|
375
|
+
"enabled": true,
|
|
376
|
+
"level": "error"
|
|
377
|
+
},
|
|
378
|
+
"properties": {
|
|
379
|
+
"tags": [
|
|
380
|
+
"security",
|
|
381
|
+
"external/cwe/cwe-918"
|
|
382
|
+
],
|
|
383
|
+
"description": "Making a network request to a URL that is fully user-controlled allows for request forgery attacks.",
|
|
384
|
+
"id": "py/full-ssrf",
|
|
385
|
+
"kind": "path-problem",
|
|
386
|
+
"name": "Full server-side request forgery",
|
|
387
|
+
"precision": "high",
|
|
388
|
+
"problem.severity": "error",
|
|
389
|
+
"security-severity": "9.1"
|
|
390
|
+
}
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
"id": "py/pam-auth-bypass",
|
|
394
|
+
"name": "py/pam-auth-bypass",
|
|
395
|
+
"shortDescription": {
|
|
396
|
+
"text": "PAM authorization bypass due to incorrect usage"
|
|
397
|
+
},
|
|
398
|
+
"fullDescription": {
|
|
399
|
+
"text": "Not using `pam_acct_mgmt` after `pam_authenticate` to check the validity of a login can lead to authorization bypass."
|
|
400
|
+
},
|
|
401
|
+
"defaultConfiguration": {
|
|
402
|
+
"enabled": true,
|
|
403
|
+
"level": "warning"
|
|
404
|
+
},
|
|
405
|
+
"properties": {
|
|
406
|
+
"tags": [
|
|
407
|
+
"security",
|
|
408
|
+
"external/cwe/cwe-285"
|
|
409
|
+
],
|
|
410
|
+
"description": "Not using `pam_acct_mgmt` after `pam_authenticate` to check the validity of a login can lead to authorization bypass.",
|
|
411
|
+
"id": "py/pam-auth-bypass",
|
|
412
|
+
"kind": "path-problem",
|
|
413
|
+
"name": "PAM authorization bypass due to incorrect usage",
|
|
414
|
+
"precision": "high",
|
|
415
|
+
"problem.severity": "warning",
|
|
416
|
+
"security-severity": "8.1"
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"id": "py/insecure-cookie",
|
|
421
|
+
"name": "py/insecure-cookie",
|
|
422
|
+
"shortDescription": {
|
|
423
|
+
"text": "Failure to use secure cookies"
|
|
424
|
+
},
|
|
425
|
+
"fullDescription": {
|
|
426
|
+
"text": "Insecure cookies may be sent in cleartext, which makes them vulnerable to interception."
|
|
427
|
+
},
|
|
428
|
+
"defaultConfiguration": {
|
|
429
|
+
"enabled": true,
|
|
430
|
+
"level": "warning"
|
|
431
|
+
},
|
|
432
|
+
"properties": {
|
|
433
|
+
"tags": [
|
|
434
|
+
"security",
|
|
435
|
+
"external/cwe/cwe-614",
|
|
436
|
+
"external/cwe/cwe-1004",
|
|
437
|
+
"external/cwe/cwe-1275"
|
|
438
|
+
],
|
|
439
|
+
"description": "Insecure cookies may be sent in cleartext, which makes them vulnerable to\n interception.",
|
|
440
|
+
"id": "py/insecure-cookie",
|
|
441
|
+
"kind": "problem",
|
|
442
|
+
"name": "Failure to use secure cookies",
|
|
443
|
+
"precision": "high",
|
|
444
|
+
"problem.severity": "warning",
|
|
445
|
+
"security-severity": "5.0"
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
"id": "py/sql-injection",
|
|
450
|
+
"name": "py/sql-injection",
|
|
451
|
+
"shortDescription": {
|
|
452
|
+
"text": "SQL query built from user-controlled sources"
|
|
453
|
+
},
|
|
454
|
+
"fullDescription": {
|
|
455
|
+
"text": "Building a SQL query from user-controlled sources is vulnerable to insertion of malicious SQL code by the user."
|
|
456
|
+
},
|
|
457
|
+
"defaultConfiguration": {
|
|
458
|
+
"enabled": true,
|
|
459
|
+
"level": "error"
|
|
460
|
+
},
|
|
461
|
+
"properties": {
|
|
462
|
+
"tags": [
|
|
463
|
+
"security",
|
|
464
|
+
"external/cwe/cwe-089"
|
|
465
|
+
],
|
|
466
|
+
"description": "Building a SQL query from user-controlled sources is vulnerable to insertion of\n malicious SQL code by the user.",
|
|
467
|
+
"id": "py/sql-injection",
|
|
468
|
+
"kind": "path-problem",
|
|
469
|
+
"name": "SQL query built from user-controlled sources",
|
|
470
|
+
"precision": "high",
|
|
471
|
+
"problem.severity": "error",
|
|
472
|
+
"security-severity": "8.8"
|
|
473
|
+
}
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
"id": "py/incomplete-hostname-regexp",
|
|
477
|
+
"name": "py/incomplete-hostname-regexp",
|
|
478
|
+
"shortDescription": {
|
|
479
|
+
"text": "Incomplete regular expression for hostnames"
|
|
480
|
+
},
|
|
481
|
+
"fullDescription": {
|
|
482
|
+
"text": "Matching a URL or hostname against a regular expression that contains an unescaped dot as part of the hostname might match more hostnames than expected."
|
|
483
|
+
},
|
|
484
|
+
"defaultConfiguration": {
|
|
485
|
+
"enabled": true,
|
|
486
|
+
"level": "warning"
|
|
487
|
+
},
|
|
488
|
+
"properties": {
|
|
489
|
+
"tags": [
|
|
490
|
+
"correctness",
|
|
491
|
+
"security",
|
|
492
|
+
"external/cwe/cwe-020"
|
|
493
|
+
],
|
|
494
|
+
"description": "Matching a URL or hostname against a regular expression that contains an unescaped dot as part of the hostname might match more hostnames than expected.",
|
|
495
|
+
"id": "py/incomplete-hostname-regexp",
|
|
496
|
+
"kind": "problem",
|
|
497
|
+
"name": "Incomplete regular expression for hostnames",
|
|
498
|
+
"precision": "high",
|
|
499
|
+
"problem.severity": "warning",
|
|
500
|
+
"security-severity": "7.8"
|
|
501
|
+
}
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
"id": "py/cookie-injection",
|
|
505
|
+
"name": "py/cookie-injection",
|
|
506
|
+
"shortDescription": {
|
|
507
|
+
"text": "Construction of a cookie using user-supplied input"
|
|
508
|
+
},
|
|
509
|
+
"fullDescription": {
|
|
510
|
+
"text": "Constructing cookies from user input may allow an attacker to perform a Cookie Poisoning attack."
|
|
511
|
+
},
|
|
512
|
+
"defaultConfiguration": {
|
|
513
|
+
"enabled": true,
|
|
514
|
+
"level": "warning"
|
|
515
|
+
},
|
|
516
|
+
"properties": {
|
|
517
|
+
"tags": [
|
|
518
|
+
"security",
|
|
519
|
+
"external/cwe/cwe-20"
|
|
520
|
+
],
|
|
521
|
+
"description": "Constructing cookies from user input may allow an attacker to perform a Cookie Poisoning attack.",
|
|
522
|
+
"id": "py/cookie-injection",
|
|
523
|
+
"kind": "path-problem",
|
|
524
|
+
"name": "Construction of a cookie using user-supplied input",
|
|
525
|
+
"precision": "high",
|
|
526
|
+
"problem.severity": "warning",
|
|
527
|
+
"security-severity": "5.0"
|
|
528
|
+
}
|
|
529
|
+
},
|
|
530
|
+
{
|
|
531
|
+
"id": "py/incomplete-url-substring-sanitization",
|
|
532
|
+
"name": "py/incomplete-url-substring-sanitization",
|
|
533
|
+
"shortDescription": {
|
|
534
|
+
"text": "Incomplete URL substring sanitization"
|
|
535
|
+
},
|
|
536
|
+
"fullDescription": {
|
|
537
|
+
"text": "Security checks on the substrings of an unparsed URL are often vulnerable to bypassing."
|
|
538
|
+
},
|
|
539
|
+
"defaultConfiguration": {
|
|
540
|
+
"enabled": true,
|
|
541
|
+
"level": "warning"
|
|
542
|
+
},
|
|
543
|
+
"properties": {
|
|
544
|
+
"tags": [
|
|
545
|
+
"correctness",
|
|
546
|
+
"security",
|
|
547
|
+
"external/cwe/cwe-20"
|
|
548
|
+
],
|
|
549
|
+
"description": "Security checks on the substrings of an unparsed URL are often vulnerable to bypassing.",
|
|
550
|
+
"id": "py/incomplete-url-substring-sanitization",
|
|
551
|
+
"kind": "problem",
|
|
552
|
+
"name": "Incomplete URL substring sanitization",
|
|
553
|
+
"precision": "high",
|
|
554
|
+
"problem.severity": "warning",
|
|
555
|
+
"security-severity": "7.8"
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"id": "py/overly-large-range",
|
|
560
|
+
"name": "py/overly-large-range",
|
|
561
|
+
"shortDescription": {
|
|
562
|
+
"text": "Overly permissive regular expression range"
|
|
563
|
+
},
|
|
564
|
+
"fullDescription": {
|
|
565
|
+
"text": "Overly permissive regular expression ranges match a wider range of characters than intended. This may allow an attacker to bypass a filter or sanitizer."
|
|
566
|
+
},
|
|
567
|
+
"defaultConfiguration": {
|
|
568
|
+
"enabled": true,
|
|
569
|
+
"level": "warning"
|
|
570
|
+
},
|
|
571
|
+
"properties": {
|
|
572
|
+
"tags": [
|
|
573
|
+
"correctness",
|
|
574
|
+
"security",
|
|
575
|
+
"external/cwe/cwe-020"
|
|
576
|
+
],
|
|
577
|
+
"description": "Overly permissive regular expression ranges match a wider range of characters than intended.\n This may allow an attacker to bypass a filter or sanitizer.",
|
|
578
|
+
"id": "py/overly-large-range",
|
|
579
|
+
"kind": "problem",
|
|
580
|
+
"name": "Overly permissive regular expression range",
|
|
581
|
+
"precision": "high",
|
|
582
|
+
"problem.severity": "warning",
|
|
583
|
+
"security-severity": "5.0"
|
|
584
|
+
}
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"id": "py/flask-debug",
|
|
588
|
+
"name": "py/flask-debug",
|
|
589
|
+
"shortDescription": {
|
|
590
|
+
"text": "Flask app is run in debug mode"
|
|
591
|
+
},
|
|
592
|
+
"fullDescription": {
|
|
593
|
+
"text": "Running a Flask app in debug mode may allow an attacker to run arbitrary code through the Werkzeug debugger."
|
|
594
|
+
},
|
|
595
|
+
"defaultConfiguration": {
|
|
596
|
+
"enabled": true,
|
|
597
|
+
"level": "error"
|
|
598
|
+
},
|
|
599
|
+
"properties": {
|
|
600
|
+
"tags": [
|
|
601
|
+
"security",
|
|
602
|
+
"external/cwe/cwe-215",
|
|
603
|
+
"external/cwe/cwe-489"
|
|
604
|
+
],
|
|
605
|
+
"description": "Running a Flask app in debug mode may allow an attacker to run arbitrary code through the Werkzeug debugger.",
|
|
606
|
+
"id": "py/flask-debug",
|
|
607
|
+
"kind": "problem",
|
|
608
|
+
"name": "Flask app is run in debug mode",
|
|
609
|
+
"precision": "high",
|
|
610
|
+
"problem.severity": "error",
|
|
611
|
+
"security-severity": "7.5"
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
"id": "py/ldap-injection",
|
|
616
|
+
"name": "py/ldap-injection",
|
|
617
|
+
"shortDescription": {
|
|
618
|
+
"text": "LDAP query built from user-controlled sources"
|
|
619
|
+
},
|
|
620
|
+
"fullDescription": {
|
|
621
|
+
"text": "Building an LDAP query from user-controlled sources is vulnerable to insertion of malicious LDAP code by the user."
|
|
622
|
+
},
|
|
623
|
+
"defaultConfiguration": {
|
|
624
|
+
"enabled": true,
|
|
625
|
+
"level": "error"
|
|
626
|
+
},
|
|
627
|
+
"properties": {
|
|
628
|
+
"tags": [
|
|
629
|
+
"security",
|
|
630
|
+
"external/cwe/cwe-090"
|
|
631
|
+
],
|
|
632
|
+
"description": "Building an LDAP query from user-controlled sources is vulnerable to insertion of\n malicious LDAP code by the user.",
|
|
633
|
+
"id": "py/ldap-injection",
|
|
634
|
+
"kind": "path-problem",
|
|
635
|
+
"name": "LDAP query built from user-controlled sources",
|
|
636
|
+
"precision": "high",
|
|
637
|
+
"problem.severity": "error",
|
|
638
|
+
"security-severity": "9.8"
|
|
639
|
+
}
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
"id": "py/bind-socket-all-network-interfaces",
|
|
643
|
+
"name": "py/bind-socket-all-network-interfaces",
|
|
644
|
+
"shortDescription": {
|
|
645
|
+
"text": "Binding a socket to all network interfaces"
|
|
646
|
+
},
|
|
647
|
+
"fullDescription": {
|
|
648
|
+
"text": "Binding a socket to all interfaces opens it up to traffic from any IPv4 address and is therefore associated with security risks."
|
|
649
|
+
},
|
|
650
|
+
"defaultConfiguration": {
|
|
651
|
+
"enabled": true,
|
|
652
|
+
"level": "error"
|
|
653
|
+
},
|
|
654
|
+
"properties": {
|
|
655
|
+
"tags": [
|
|
656
|
+
"security",
|
|
657
|
+
"external/cwe/cwe-200"
|
|
658
|
+
],
|
|
659
|
+
"description": "Binding a socket to all interfaces opens it up to traffic from any IPv4 address\n and is therefore associated with security risks.",
|
|
660
|
+
"id": "py/bind-socket-all-network-interfaces",
|
|
661
|
+
"kind": "problem",
|
|
662
|
+
"name": "Binding a socket to all network interfaces",
|
|
663
|
+
"precision": "high",
|
|
664
|
+
"problem.severity": "error",
|
|
665
|
+
"security-severity": "6.5",
|
|
666
|
+
"sub-severity": "low"
|
|
667
|
+
}
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
"id": "py/paramiko-missing-host-key-validation",
|
|
671
|
+
"name": "py/paramiko-missing-host-key-validation",
|
|
672
|
+
"shortDescription": {
|
|
673
|
+
"text": "Accepting unknown SSH host keys when using Paramiko"
|
|
674
|
+
},
|
|
675
|
+
"fullDescription": {
|
|
676
|
+
"text": "Accepting unknown host keys can allow man-in-the-middle attacks."
|
|
677
|
+
},
|
|
678
|
+
"defaultConfiguration": {
|
|
679
|
+
"enabled": true,
|
|
680
|
+
"level": "error"
|
|
681
|
+
},
|
|
682
|
+
"properties": {
|
|
683
|
+
"tags": [
|
|
684
|
+
"security",
|
|
685
|
+
"external/cwe/cwe-295"
|
|
686
|
+
],
|
|
687
|
+
"description": "Accepting unknown host keys can allow man-in-the-middle attacks.",
|
|
688
|
+
"id": "py/paramiko-missing-host-key-validation",
|
|
689
|
+
"kind": "problem",
|
|
690
|
+
"name": "Accepting unknown SSH host keys when using Paramiko",
|
|
691
|
+
"precision": "high",
|
|
692
|
+
"problem.severity": "error",
|
|
693
|
+
"security-severity": "7.5"
|
|
694
|
+
}
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
"id": "py/insecure-temporary-file",
|
|
698
|
+
"name": "py/insecure-temporary-file",
|
|
699
|
+
"shortDescription": {
|
|
700
|
+
"text": "Insecure temporary file"
|
|
701
|
+
},
|
|
702
|
+
"fullDescription": {
|
|
703
|
+
"text": "Creating a temporary file using this method may be insecure."
|
|
704
|
+
},
|
|
705
|
+
"defaultConfiguration": {
|
|
706
|
+
"enabled": true,
|
|
707
|
+
"level": "error"
|
|
708
|
+
},
|
|
709
|
+
"properties": {
|
|
710
|
+
"tags": [
|
|
711
|
+
"external/cwe/cwe-377",
|
|
712
|
+
"security"
|
|
713
|
+
],
|
|
714
|
+
"description": "Creating a temporary file using this method may be insecure.",
|
|
715
|
+
"id": "py/insecure-temporary-file",
|
|
716
|
+
"kind": "problem",
|
|
717
|
+
"name": "Insecure temporary file",
|
|
718
|
+
"precision": "high",
|
|
719
|
+
"problem.severity": "error",
|
|
720
|
+
"security-severity": "7.0",
|
|
721
|
+
"sub-severity": "high"
|
|
722
|
+
}
|
|
723
|
+
},
|
|
724
|
+
{
|
|
725
|
+
"id": "py/bad-tag-filter",
|
|
726
|
+
"name": "py/bad-tag-filter",
|
|
727
|
+
"shortDescription": {
|
|
728
|
+
"text": "Bad HTML filtering regexp"
|
|
729
|
+
},
|
|
730
|
+
"fullDescription": {
|
|
731
|
+
"text": "Matching HTML tags using regular expressions is hard to do right, and can easily lead to security issues."
|
|
732
|
+
},
|
|
733
|
+
"defaultConfiguration": {
|
|
734
|
+
"enabled": true,
|
|
735
|
+
"level": "warning"
|
|
736
|
+
},
|
|
737
|
+
"properties": {
|
|
738
|
+
"tags": [
|
|
739
|
+
"correctness",
|
|
740
|
+
"security",
|
|
741
|
+
"external/cwe/cwe-116",
|
|
742
|
+
"external/cwe/cwe-020",
|
|
743
|
+
"external/cwe/cwe-185",
|
|
744
|
+
"external/cwe/cwe-186"
|
|
745
|
+
],
|
|
746
|
+
"description": "Matching HTML tags using regular expressions is hard to do right, and can easily lead to security issues.",
|
|
747
|
+
"id": "py/bad-tag-filter",
|
|
748
|
+
"kind": "problem",
|
|
749
|
+
"name": "Bad HTML filtering regexp",
|
|
750
|
+
"precision": "high",
|
|
751
|
+
"problem.severity": "warning",
|
|
752
|
+
"security-severity": "7.8"
|
|
753
|
+
}
|
|
754
|
+
},
|
|
755
|
+
{
|
|
756
|
+
"id": "py/xml-bomb",
|
|
757
|
+
"name": "py/xml-bomb",
|
|
758
|
+
"shortDescription": {
|
|
759
|
+
"text": "XML internal entity expansion"
|
|
760
|
+
},
|
|
761
|
+
"fullDescription": {
|
|
762
|
+
"text": "Parsing user input as an XML document with arbitrary internal entity expansion is vulnerable to denial-of-service attacks."
|
|
763
|
+
},
|
|
764
|
+
"defaultConfiguration": {
|
|
765
|
+
"enabled": true,
|
|
766
|
+
"level": "warning"
|
|
767
|
+
},
|
|
768
|
+
"properties": {
|
|
769
|
+
"tags": [
|
|
770
|
+
"security",
|
|
771
|
+
"external/cwe/cwe-776",
|
|
772
|
+
"external/cwe/cwe-400"
|
|
773
|
+
],
|
|
774
|
+
"description": "Parsing user input as an XML document with arbitrary internal\n entity expansion is vulnerable to denial-of-service attacks.",
|
|
775
|
+
"id": "py/xml-bomb",
|
|
776
|
+
"kind": "path-problem",
|
|
777
|
+
"name": "XML internal entity expansion",
|
|
778
|
+
"precision": "high",
|
|
779
|
+
"problem.severity": "warning",
|
|
780
|
+
"security-severity": "7.5"
|
|
781
|
+
}
|
|
782
|
+
},
|
|
783
|
+
{
|
|
784
|
+
"id": "py/clear-text-storage-sensitive-data",
|
|
785
|
+
"name": "py/clear-text-storage-sensitive-data",
|
|
786
|
+
"shortDescription": {
|
|
787
|
+
"text": "Clear-text storage of sensitive information"
|
|
788
|
+
},
|
|
789
|
+
"fullDescription": {
|
|
790
|
+
"text": "Sensitive information stored without encryption or hashing can expose it to an attacker."
|
|
791
|
+
},
|
|
792
|
+
"defaultConfiguration": {
|
|
793
|
+
"enabled": true,
|
|
794
|
+
"level": "error"
|
|
795
|
+
},
|
|
796
|
+
"properties": {
|
|
797
|
+
"tags": [
|
|
798
|
+
"security",
|
|
799
|
+
"external/cwe/cwe-312",
|
|
800
|
+
"external/cwe/cwe-315",
|
|
801
|
+
"external/cwe/cwe-359"
|
|
802
|
+
],
|
|
803
|
+
"description": "Sensitive information stored without encryption or hashing can expose it to an\n attacker.",
|
|
804
|
+
"id": "py/clear-text-storage-sensitive-data",
|
|
805
|
+
"kind": "path-problem",
|
|
806
|
+
"name": "Clear-text storage of sensitive information",
|
|
807
|
+
"precision": "high",
|
|
808
|
+
"problem.severity": "error",
|
|
809
|
+
"security-severity": "7.5"
|
|
810
|
+
}
|
|
811
|
+
},
|
|
812
|
+
{
|
|
813
|
+
"id": "py/clear-text-logging-sensitive-data",
|
|
814
|
+
"name": "py/clear-text-logging-sensitive-data",
|
|
815
|
+
"shortDescription": {
|
|
816
|
+
"text": "Clear-text logging of sensitive information"
|
|
817
|
+
},
|
|
818
|
+
"fullDescription": {
|
|
819
|
+
"text": "Logging sensitive information without encryption or hashing can expose it to an attacker."
|
|
820
|
+
},
|
|
821
|
+
"defaultConfiguration": {
|
|
822
|
+
"enabled": true,
|
|
823
|
+
"level": "error"
|
|
824
|
+
},
|
|
825
|
+
"properties": {
|
|
826
|
+
"tags": [
|
|
827
|
+
"security",
|
|
828
|
+
"external/cwe/cwe-312",
|
|
829
|
+
"external/cwe/cwe-359",
|
|
830
|
+
"external/cwe/cwe-532"
|
|
831
|
+
],
|
|
832
|
+
"description": "Logging sensitive information without encryption or hashing can\n expose it to an attacker.",
|
|
833
|
+
"id": "py/clear-text-logging-sensitive-data",
|
|
834
|
+
"kind": "path-problem",
|
|
835
|
+
"name": "Clear-text logging of sensitive information",
|
|
836
|
+
"precision": "high",
|
|
837
|
+
"problem.severity": "error",
|
|
838
|
+
"security-severity": "7.5"
|
|
839
|
+
}
|
|
840
|
+
},
|
|
841
|
+
{
|
|
842
|
+
"id": "py/csrf-protection-disabled",
|
|
843
|
+
"name": "py/csrf-protection-disabled",
|
|
844
|
+
"shortDescription": {
|
|
845
|
+
"text": "CSRF protection weakened or disabled"
|
|
846
|
+
},
|
|
847
|
+
"fullDescription": {
|
|
848
|
+
"text": "Disabling or weakening CSRF protection may make the application vulnerable to a Cross-Site Request Forgery (CSRF) attack."
|
|
849
|
+
},
|
|
850
|
+
"defaultConfiguration": {
|
|
851
|
+
"enabled": true,
|
|
852
|
+
"level": "warning"
|
|
853
|
+
},
|
|
854
|
+
"properties": {
|
|
855
|
+
"tags": [
|
|
856
|
+
"security",
|
|
857
|
+
"external/cwe/cwe-352"
|
|
858
|
+
],
|
|
859
|
+
"description": "Disabling or weakening CSRF protection may make the application\n vulnerable to a Cross-Site Request Forgery (CSRF) attack.",
|
|
860
|
+
"id": "py/csrf-protection-disabled",
|
|
861
|
+
"kind": "problem",
|
|
862
|
+
"name": "CSRF protection weakened or disabled",
|
|
863
|
+
"precision": "high",
|
|
864
|
+
"problem.severity": "warning",
|
|
865
|
+
"security-severity": "8.8"
|
|
866
|
+
}
|
|
867
|
+
},
|
|
868
|
+
{
|
|
869
|
+
"id": "py/unsafe-deserialization",
|
|
870
|
+
"name": "py/unsafe-deserialization",
|
|
871
|
+
"shortDescription": {
|
|
872
|
+
"text": "Deserialization of user-controlled data"
|
|
873
|
+
},
|
|
874
|
+
"fullDescription": {
|
|
875
|
+
"text": "Deserializing user-controlled data may allow attackers to execute arbitrary code."
|
|
876
|
+
},
|
|
877
|
+
"defaultConfiguration": {
|
|
878
|
+
"enabled": true,
|
|
879
|
+
"level": "error"
|
|
880
|
+
},
|
|
881
|
+
"properties": {
|
|
882
|
+
"tags": [
|
|
883
|
+
"external/cwe/cwe-502",
|
|
884
|
+
"security",
|
|
885
|
+
"serialization"
|
|
886
|
+
],
|
|
887
|
+
"description": "Deserializing user-controlled data may allow attackers to execute arbitrary code.",
|
|
888
|
+
"id": "py/unsafe-deserialization",
|
|
889
|
+
"kind": "path-problem",
|
|
890
|
+
"name": "Deserialization of user-controlled data",
|
|
891
|
+
"precision": "high",
|
|
892
|
+
"problem.severity": "error",
|
|
893
|
+
"security-severity": "9.8",
|
|
894
|
+
"sub-severity": "high"
|
|
895
|
+
}
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
"id": "py/regex-injection",
|
|
899
|
+
"name": "py/regex-injection",
|
|
900
|
+
"shortDescription": {
|
|
901
|
+
"text": "Regular expression injection"
|
|
902
|
+
},
|
|
903
|
+
"fullDescription": {
|
|
904
|
+
"text": "User input should not be used in regular expressions without first being escaped, otherwise a malicious user may be able to inject an expression that could require exponential time on certain inputs."
|
|
905
|
+
},
|
|
906
|
+
"defaultConfiguration": {
|
|
907
|
+
"enabled": true,
|
|
908
|
+
"level": "error"
|
|
909
|
+
},
|
|
910
|
+
"properties": {
|
|
911
|
+
"tags": [
|
|
912
|
+
"security",
|
|
913
|
+
"external/cwe/cwe-730",
|
|
914
|
+
"external/cwe/cwe-400"
|
|
915
|
+
],
|
|
916
|
+
"description": "User input should not be used in regular expressions without first being escaped,\n otherwise a malicious user may be able to inject an expression that could require\n exponential time on certain inputs.",
|
|
917
|
+
"id": "py/regex-injection",
|
|
918
|
+
"kind": "path-problem",
|
|
919
|
+
"name": "Regular expression injection",
|
|
920
|
+
"precision": "high",
|
|
921
|
+
"problem.severity": "error",
|
|
922
|
+
"security-severity": "7.5"
|
|
923
|
+
}
|
|
924
|
+
},
|
|
925
|
+
{
|
|
926
|
+
"id": "py/redos",
|
|
927
|
+
"name": "py/redos",
|
|
928
|
+
"shortDescription": {
|
|
929
|
+
"text": "Inefficient regular expression"
|
|
930
|
+
},
|
|
931
|
+
"fullDescription": {
|
|
932
|
+
"text": "A regular expression that requires exponential time to match certain inputs can be a performance bottleneck, and may be vulnerable to denial-of-service attacks."
|
|
933
|
+
},
|
|
934
|
+
"defaultConfiguration": {
|
|
935
|
+
"enabled": true,
|
|
936
|
+
"level": "error"
|
|
937
|
+
},
|
|
938
|
+
"properties": {
|
|
939
|
+
"tags": [
|
|
940
|
+
"security",
|
|
941
|
+
"external/cwe/cwe-1333",
|
|
942
|
+
"external/cwe/cwe-730",
|
|
943
|
+
"external/cwe/cwe-400"
|
|
944
|
+
],
|
|
945
|
+
"description": "A regular expression that requires exponential time to match certain inputs\n can be a performance bottleneck, and may be vulnerable to denial-of-service\n attacks.",
|
|
946
|
+
"id": "py/redos",
|
|
947
|
+
"kind": "problem",
|
|
948
|
+
"name": "Inefficient regular expression",
|
|
949
|
+
"precision": "high",
|
|
950
|
+
"problem.severity": "error",
|
|
951
|
+
"security-severity": "7.5"
|
|
952
|
+
}
|
|
953
|
+
},
|
|
954
|
+
{
|
|
955
|
+
"id": "py/polynomial-redos",
|
|
956
|
+
"name": "py/polynomial-redos",
|
|
957
|
+
"shortDescription": {
|
|
958
|
+
"text": "Polynomial regular expression used on uncontrolled data"
|
|
959
|
+
},
|
|
960
|
+
"fullDescription": {
|
|
961
|
+
"text": "A regular expression that can require polynomial time to match may be vulnerable to denial-of-service attacks."
|
|
962
|
+
},
|
|
963
|
+
"defaultConfiguration": {
|
|
964
|
+
"enabled": true,
|
|
965
|
+
"level": "warning"
|
|
966
|
+
},
|
|
967
|
+
"properties": {
|
|
968
|
+
"tags": [
|
|
969
|
+
"security",
|
|
970
|
+
"external/cwe/cwe-1333",
|
|
971
|
+
"external/cwe/cwe-730",
|
|
972
|
+
"external/cwe/cwe-400"
|
|
973
|
+
],
|
|
974
|
+
"description": "A regular expression that can require polynomial time\n to match may be vulnerable to denial-of-service attacks.",
|
|
975
|
+
"id": "py/polynomial-redos",
|
|
976
|
+
"kind": "path-problem",
|
|
977
|
+
"name": "Polynomial regular expression used on uncontrolled data",
|
|
978
|
+
"precision": "high",
|
|
979
|
+
"problem.severity": "warning",
|
|
980
|
+
"security-severity": "7.5"
|
|
981
|
+
}
|
|
982
|
+
},
|
|
983
|
+
{
|
|
984
|
+
"id": "py/path-injection",
|
|
985
|
+
"name": "py/path-injection",
|
|
986
|
+
"shortDescription": {
|
|
987
|
+
"text": "Uncontrolled data used in path expression"
|
|
988
|
+
},
|
|
989
|
+
"fullDescription": {
|
|
990
|
+
"text": "Accessing paths influenced by users can allow an attacker to access unexpected resources."
|
|
991
|
+
},
|
|
992
|
+
"defaultConfiguration": {
|
|
993
|
+
"enabled": true,
|
|
994
|
+
"level": "error"
|
|
995
|
+
},
|
|
996
|
+
"properties": {
|
|
997
|
+
"tags": [
|
|
998
|
+
"correctness",
|
|
999
|
+
"security",
|
|
1000
|
+
"external/cwe/cwe-022",
|
|
1001
|
+
"external/cwe/cwe-023",
|
|
1002
|
+
"external/cwe/cwe-036",
|
|
1003
|
+
"external/cwe/cwe-073",
|
|
1004
|
+
"external/cwe/cwe-099"
|
|
1005
|
+
],
|
|
1006
|
+
"description": "Accessing paths influenced by users can allow an attacker to access unexpected resources.",
|
|
1007
|
+
"id": "py/path-injection",
|
|
1008
|
+
"kind": "path-problem",
|
|
1009
|
+
"name": "Uncontrolled data used in path expression",
|
|
1010
|
+
"precision": "high",
|
|
1011
|
+
"problem.severity": "error",
|
|
1012
|
+
"security-severity": "7.5",
|
|
1013
|
+
"sub-severity": "high"
|
|
1014
|
+
}
|
|
1015
|
+
},
|
|
1016
|
+
{
|
|
1017
|
+
"id": "py/xxe",
|
|
1018
|
+
"name": "py/xxe",
|
|
1019
|
+
"shortDescription": {
|
|
1020
|
+
"text": "XML external entity expansion"
|
|
1021
|
+
},
|
|
1022
|
+
"fullDescription": {
|
|
1023
|
+
"text": "Parsing user input as an XML document with external entity expansion is vulnerable to XXE attacks."
|
|
1024
|
+
},
|
|
1025
|
+
"defaultConfiguration": {
|
|
1026
|
+
"enabled": true,
|
|
1027
|
+
"level": "error"
|
|
1028
|
+
},
|
|
1029
|
+
"properties": {
|
|
1030
|
+
"tags": [
|
|
1031
|
+
"security",
|
|
1032
|
+
"external/cwe/cwe-611",
|
|
1033
|
+
"external/cwe/cwe-827"
|
|
1034
|
+
],
|
|
1035
|
+
"description": "Parsing user input as an XML document with external\n entity expansion is vulnerable to XXE attacks.",
|
|
1036
|
+
"id": "py/xxe",
|
|
1037
|
+
"kind": "path-problem",
|
|
1038
|
+
"name": "XML external entity expansion",
|
|
1039
|
+
"precision": "high",
|
|
1040
|
+
"problem.severity": "error",
|
|
1041
|
+
"security-severity": "9.1"
|
|
1042
|
+
}
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
"id": "py/command-line-injection",
|
|
1046
|
+
"name": "py/command-line-injection",
|
|
1047
|
+
"shortDescription": {
|
|
1048
|
+
"text": "Uncontrolled command line"
|
|
1049
|
+
},
|
|
1050
|
+
"fullDescription": {
|
|
1051
|
+
"text": "Using externally controlled strings in a command line may allow a malicious user to change the meaning of the command."
|
|
1052
|
+
},
|
|
1053
|
+
"defaultConfiguration": {
|
|
1054
|
+
"enabled": true,
|
|
1055
|
+
"level": "error"
|
|
1056
|
+
},
|
|
1057
|
+
"properties": {
|
|
1058
|
+
"tags": [
|
|
1059
|
+
"correctness",
|
|
1060
|
+
"security",
|
|
1061
|
+
"external/cwe/cwe-078",
|
|
1062
|
+
"external/cwe/cwe-088"
|
|
1063
|
+
],
|
|
1064
|
+
"description": "Using externally controlled strings in a command line may allow a malicious\n user to change the meaning of the command.",
|
|
1065
|
+
"id": "py/command-line-injection",
|
|
1066
|
+
"kind": "path-problem",
|
|
1067
|
+
"name": "Uncontrolled command line",
|
|
1068
|
+
"precision": "high",
|
|
1069
|
+
"problem.severity": "error",
|
|
1070
|
+
"security-severity": "9.8",
|
|
1071
|
+
"sub-severity": "high"
|
|
1072
|
+
}
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
"id": "py/xpath-injection",
|
|
1076
|
+
"name": "py/xpath-injection",
|
|
1077
|
+
"shortDescription": {
|
|
1078
|
+
"text": "XPath query built from user-controlled sources"
|
|
1079
|
+
},
|
|
1080
|
+
"fullDescription": {
|
|
1081
|
+
"text": "Building a XPath query from user-controlled sources is vulnerable to insertion of malicious Xpath code by the user."
|
|
1082
|
+
},
|
|
1083
|
+
"defaultConfiguration": {
|
|
1084
|
+
"enabled": true,
|
|
1085
|
+
"level": "error"
|
|
1086
|
+
},
|
|
1087
|
+
"properties": {
|
|
1088
|
+
"tags": [
|
|
1089
|
+
"security",
|
|
1090
|
+
"external/cwe/cwe-643"
|
|
1091
|
+
],
|
|
1092
|
+
"description": "Building a XPath query from user-controlled sources is vulnerable to insertion of\n malicious Xpath code by the user.",
|
|
1093
|
+
"id": "py/xpath-injection",
|
|
1094
|
+
"kind": "path-problem",
|
|
1095
|
+
"name": "XPath query built from user-controlled sources",
|
|
1096
|
+
"precision": "high",
|
|
1097
|
+
"problem.severity": "error",
|
|
1098
|
+
"security-severity": "9.8"
|
|
1099
|
+
}
|
|
1100
|
+
},
|
|
1101
|
+
{
|
|
1102
|
+
"id": "py/reflective-xss",
|
|
1103
|
+
"name": "py/reflective-xss",
|
|
1104
|
+
"shortDescription": {
|
|
1105
|
+
"text": "Reflected server-side cross-site scripting"
|
|
1106
|
+
},
|
|
1107
|
+
"fullDescription": {
|
|
1108
|
+
"text": "Writing user input directly to a web page allows for a cross-site scripting vulnerability."
|
|
1109
|
+
},
|
|
1110
|
+
"defaultConfiguration": {
|
|
1111
|
+
"enabled": true,
|
|
1112
|
+
"level": "error"
|
|
1113
|
+
},
|
|
1114
|
+
"properties": {
|
|
1115
|
+
"tags": [
|
|
1116
|
+
"security",
|
|
1117
|
+
"external/cwe/cwe-079",
|
|
1118
|
+
"external/cwe/cwe-116"
|
|
1119
|
+
],
|
|
1120
|
+
"description": "Writing user input directly to a web page\n allows for a cross-site scripting vulnerability.",
|
|
1121
|
+
"id": "py/reflective-xss",
|
|
1122
|
+
"kind": "path-problem",
|
|
1123
|
+
"name": "Reflected server-side cross-site scripting",
|
|
1124
|
+
"precision": "high",
|
|
1125
|
+
"problem.severity": "error",
|
|
1126
|
+
"security-severity": "6.1",
|
|
1127
|
+
"sub-severity": "high"
|
|
1128
|
+
}
|
|
1129
|
+
},
|
|
1130
|
+
{
|
|
1131
|
+
"id": "py/use-of-input",
|
|
1132
|
+
"name": "py/use-of-input",
|
|
1133
|
+
"shortDescription": {
|
|
1134
|
+
"text": "'input' function used in Python 2"
|
|
1135
|
+
},
|
|
1136
|
+
"fullDescription": {
|
|
1137
|
+
"text": "The built-in function 'input' is used which, in Python 2, can allow arbitrary code to be run."
|
|
1138
|
+
},
|
|
1139
|
+
"defaultConfiguration": {
|
|
1140
|
+
"enabled": true,
|
|
1141
|
+
"level": "error"
|
|
1142
|
+
},
|
|
1143
|
+
"properties": {
|
|
1144
|
+
"tags": [
|
|
1145
|
+
"security",
|
|
1146
|
+
"correctness",
|
|
1147
|
+
"security/cwe/cwe-94",
|
|
1148
|
+
"security/cwe/cwe-95"
|
|
1149
|
+
],
|
|
1150
|
+
"description": "The built-in function 'input' is used which, in Python 2, can allow arbitrary code to be run.",
|
|
1151
|
+
"id": "py/use-of-input",
|
|
1152
|
+
"kind": "problem",
|
|
1153
|
+
"name": "'input' function used in Python 2",
|
|
1154
|
+
"precision": "high",
|
|
1155
|
+
"problem.severity": "error",
|
|
1156
|
+
"security-severity": "9.8",
|
|
1157
|
+
"sub-severity": "high"
|
|
1158
|
+
}
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
"id": "py/summary/lines-of-code",
|
|
1162
|
+
"name": "py/summary/lines-of-code",
|
|
1163
|
+
"shortDescription": {
|
|
1164
|
+
"text": "Total lines of Python code in the database"
|
|
1165
|
+
},
|
|
1166
|
+
"fullDescription": {
|
|
1167
|
+
"text": "The total number of lines of Python code across all files, including external libraries and auto-generated files. This is a useful metric of the size of a database. This query counts the lines of code, excluding whitespace or comments."
|
|
1168
|
+
},
|
|
1169
|
+
"defaultConfiguration": {
|
|
1170
|
+
"enabled": true
|
|
1171
|
+
},
|
|
1172
|
+
"properties": {
|
|
1173
|
+
"tags": [
|
|
1174
|
+
"summary",
|
|
1175
|
+
"telemetry"
|
|
1176
|
+
],
|
|
1177
|
+
"description": "The total number of lines of Python code across all files, including\n external libraries and auto-generated files. This is a useful metric of the size of a\n database. This query counts the lines of code, excluding whitespace or comments.",
|
|
1178
|
+
"id": "py/summary/lines-of-code",
|
|
1179
|
+
"kind": "metric",
|
|
1180
|
+
"name": "Total lines of Python code in the database"
|
|
1181
|
+
}
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
"id": "py/summary/lines-of-user-code",
|
|
1185
|
+
"name": "py/summary/lines-of-user-code",
|
|
1186
|
+
"shortDescription": {
|
|
1187
|
+
"text": "Total lines of user written Python code in the database"
|
|
1188
|
+
},
|
|
1189
|
+
"fullDescription": {
|
|
1190
|
+
"text": "The total number of lines of Python code from the source code directory, excluding auto-generated files. This query counts the lines of code, excluding whitespace or comments. Note: If external libraries are included in the codebase either in a checked-in virtual environment or as vendored code, that will currently be counted as user written code."
|
|
1191
|
+
},
|
|
1192
|
+
"defaultConfiguration": {
|
|
1193
|
+
"enabled": true
|
|
1194
|
+
},
|
|
1195
|
+
"properties": {
|
|
1196
|
+
"tags": [
|
|
1197
|
+
"summary",
|
|
1198
|
+
"lines-of-code",
|
|
1199
|
+
"debug"
|
|
1200
|
+
],
|
|
1201
|
+
"description": "The total number of lines of Python code from the source code directory,\n excluding auto-generated files. This query counts the lines of code, excluding\n whitespace or comments. Note: If external libraries are included in the codebase\n either in a checked-in virtual environment or as vendored code, that will currently\n be counted as user written code.",
|
|
1202
|
+
"id": "py/summary/lines-of-user-code",
|
|
1203
|
+
"kind": "metric",
|
|
1204
|
+
"name": "Total lines of user written Python code in the database"
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
]
|
|
1208
|
+
},
|
|
1209
|
+
"extensions": [
|
|
1210
|
+
{
|
|
1211
|
+
"name": "codeql/python-queries",
|
|
1212
|
+
"semanticVersion": "1.2.2+e99d7db428fc3981c9a1f03f03a024ac40e52f54",
|
|
1213
|
+
"locations": [
|
|
1214
|
+
{
|
|
1215
|
+
"uri": "file:///Users/john.doe/.local/bin/codeql/qlpacks/codeql/python-queries/1.2.2/",
|
|
1216
|
+
"description": {
|
|
1217
|
+
"text": "The QL pack root directory."
|
|
1218
|
+
},
|
|
1219
|
+
"properties": {
|
|
1220
|
+
"tags": [
|
|
1221
|
+
"CodeQL/LocalPackRoot"
|
|
1222
|
+
]
|
|
1223
|
+
}
|
|
1224
|
+
},
|
|
1225
|
+
{
|
|
1226
|
+
"uri": "file:///Users/john.doe/.local/bin/codeql/qlpacks/codeql/python-queries/1.2.2/qlpack.yml",
|
|
1227
|
+
"description": {
|
|
1228
|
+
"text": "The QL pack definition file."
|
|
1229
|
+
},
|
|
1230
|
+
"properties": {
|
|
1231
|
+
"tags": [
|
|
1232
|
+
"CodeQL/LocalPackDefinitionFile"
|
|
1233
|
+
]
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
]
|
|
1237
|
+
},
|
|
1238
|
+
{
|
|
1239
|
+
"name": "codeql/python-all",
|
|
1240
|
+
"semanticVersion": "2.0.0+e99d7db428fc3981c9a1f03f03a024ac40e52f54",
|
|
1241
|
+
"locations": [
|
|
1242
|
+
{
|
|
1243
|
+
"uri": "file:///Users/john.doe/.local/bin/codeql/qlpacks/codeql/python-queries/1.2.2/.codeql/libraries/codeql/python-all/2.0.0/",
|
|
1244
|
+
"description": {
|
|
1245
|
+
"text": "The QL pack root directory."
|
|
1246
|
+
},
|
|
1247
|
+
"properties": {
|
|
1248
|
+
"tags": [
|
|
1249
|
+
"CodeQL/LocalPackRoot"
|
|
1250
|
+
]
|
|
1251
|
+
}
|
|
1252
|
+
},
|
|
1253
|
+
{
|
|
1254
|
+
"uri": "file:///Users/john.doe/.local/bin/codeql/qlpacks/codeql/python-queries/1.2.2/.codeql/libraries/codeql/python-all/2.0.0/qlpack.yml",
|
|
1255
|
+
"description": {
|
|
1256
|
+
"text": "The QL pack definition file."
|
|
1257
|
+
},
|
|
1258
|
+
"properties": {
|
|
1259
|
+
"tags": [
|
|
1260
|
+
"CodeQL/LocalPackDefinitionFile"
|
|
1261
|
+
]
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
]
|
|
1265
|
+
}
|
|
1266
|
+
]
|
|
1267
|
+
},
|
|
1268
|
+
"invocations": [
|
|
1269
|
+
{
|
|
1270
|
+
"toolExecutionNotifications": [
|
|
1271
|
+
{
|
|
1272
|
+
"locations": [
|
|
1273
|
+
{
|
|
1274
|
+
"physicalLocation": {
|
|
1275
|
+
"artifactLocation": {
|
|
1276
|
+
"uri": "script.py",
|
|
1277
|
+
"uriBaseId": "%SRCROOT%",
|
|
1278
|
+
"index": 0
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
],
|
|
1283
|
+
"message": {
|
|
1284
|
+
"text": ""
|
|
1285
|
+
},
|
|
1286
|
+
"level": "none",
|
|
1287
|
+
"descriptor": {
|
|
1288
|
+
"id": "py/diagnostics/successfully-extracted-files",
|
|
1289
|
+
"index": 0
|
|
1290
|
+
},
|
|
1291
|
+
"properties": {
|
|
1292
|
+
"formattedMessage": {
|
|
1293
|
+
"text": ""
|
|
1294
|
+
}
|
|
1295
|
+
}
|
|
1296
|
+
},
|
|
1297
|
+
{
|
|
1298
|
+
"locations": [
|
|
1299
|
+
{
|
|
1300
|
+
"physicalLocation": {
|
|
1301
|
+
"artifactLocation": {
|
|
1302
|
+
"uri": ".codeql-db/codeql-database.yml",
|
|
1303
|
+
"uriBaseId": "%SRCROOT%",
|
|
1304
|
+
"index": 1
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
],
|
|
1309
|
+
"message": {
|
|
1310
|
+
"text": ""
|
|
1311
|
+
},
|
|
1312
|
+
"level": "none",
|
|
1313
|
+
"descriptor": {
|
|
1314
|
+
"id": "py/diagnostics/successfully-extracted-files",
|
|
1315
|
+
"index": 0
|
|
1316
|
+
},
|
|
1317
|
+
"properties": {
|
|
1318
|
+
"formattedMessage": {
|
|
1319
|
+
"text": ""
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
},
|
|
1323
|
+
{
|
|
1324
|
+
"locations": [
|
|
1325
|
+
{
|
|
1326
|
+
"physicalLocation": {
|
|
1327
|
+
"artifactLocation": {
|
|
1328
|
+
"uri": "script.py",
|
|
1329
|
+
"uriBaseId": "%SRCROOT%",
|
|
1330
|
+
"index": 0
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
],
|
|
1335
|
+
"message": {
|
|
1336
|
+
"text": ""
|
|
1337
|
+
},
|
|
1338
|
+
"level": "none",
|
|
1339
|
+
"descriptor": {
|
|
1340
|
+
"id": "py/baseline/expected-extracted-files",
|
|
1341
|
+
"index": 2
|
|
1342
|
+
},
|
|
1343
|
+
"properties": {
|
|
1344
|
+
"formattedMessage": {
|
|
1345
|
+
"text": ""
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
"message": {
|
|
1351
|
+
"text": ""
|
|
1352
|
+
},
|
|
1353
|
+
"level": "note",
|
|
1354
|
+
"timeUtc": "2025-05-09T08:10:22.071+00:00",
|
|
1355
|
+
"descriptor": {
|
|
1356
|
+
"id": "cli/sip-enablement",
|
|
1357
|
+
"index": 3
|
|
1358
|
+
},
|
|
1359
|
+
"properties": {
|
|
1360
|
+
"attributes": {
|
|
1361
|
+
"isEnabled": true
|
|
1362
|
+
},
|
|
1363
|
+
"visibility": {
|
|
1364
|
+
"statusPage": false,
|
|
1365
|
+
"telemetry": true
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
],
|
|
1370
|
+
"executionSuccessful": true
|
|
1371
|
+
}
|
|
1372
|
+
],
|
|
1373
|
+
"artifacts": [
|
|
1374
|
+
{
|
|
1375
|
+
"location": {
|
|
1376
|
+
"uri": "script.py",
|
|
1377
|
+
"uriBaseId": "%SRCROOT%",
|
|
1378
|
+
"index": 0
|
|
1379
|
+
}
|
|
1380
|
+
},
|
|
1381
|
+
{
|
|
1382
|
+
"location": {
|
|
1383
|
+
"uri": ".codeql-db/codeql-database.yml",
|
|
1384
|
+
"uriBaseId": "%SRCROOT%",
|
|
1385
|
+
"index": 1
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1388
|
+
],
|
|
1389
|
+
"results": [
|
|
1390
|
+
{
|
|
1391
|
+
"ruleId": "py/bind-socket-all-network-interfaces",
|
|
1392
|
+
"ruleIndex": 20,
|
|
1393
|
+
"rule": {
|
|
1394
|
+
"id": "py/bind-socket-all-network-interfaces",
|
|
1395
|
+
"index": 20
|
|
1396
|
+
},
|
|
1397
|
+
"message": {
|
|
1398
|
+
"text": "'0.0.0.0' binds a socket to all interfaces."
|
|
1399
|
+
},
|
|
1400
|
+
"locations": [
|
|
1401
|
+
{
|
|
1402
|
+
"physicalLocation": {
|
|
1403
|
+
"artifactLocation": {
|
|
1404
|
+
"uri": "script.py",
|
|
1405
|
+
"uriBaseId": "%SRCROOT%",
|
|
1406
|
+
"index": 0
|
|
1407
|
+
},
|
|
1408
|
+
"region": {
|
|
1409
|
+
"startLine": 6,
|
|
1410
|
+
"endColumn": 27
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
],
|
|
1415
|
+
"partialFingerprints": {
|
|
1416
|
+
"primaryLocationLineHash": "5e7a4c3f4c46a812:1",
|
|
1417
|
+
"primaryLocationStartColumnFingerprint": "0"
|
|
1418
|
+
}
|
|
1419
|
+
}
|
|
1420
|
+
],
|
|
1421
|
+
"columnKind": "unicodeCodePoints",
|
|
1422
|
+
"properties": {
|
|
1423
|
+
"semmle.formatSpecifier": "sarifv2.1.0",
|
|
1424
|
+
"metricResults": [
|
|
1425
|
+
{
|
|
1426
|
+
"rule": {
|
|
1427
|
+
"id": "py/summary/lines-of-code",
|
|
1428
|
+
"index": 38
|
|
1429
|
+
},
|
|
1430
|
+
"ruleId": "py/summary/lines-of-code",
|
|
1431
|
+
"ruleIndex": 38,
|
|
1432
|
+
"value": 121874
|
|
1433
|
+
},
|
|
1434
|
+
{
|
|
1435
|
+
"rule": {
|
|
1436
|
+
"id": "py/summary/lines-of-user-code",
|
|
1437
|
+
"index": 39
|
|
1438
|
+
},
|
|
1439
|
+
"ruleId": "py/summary/lines-of-user-code",
|
|
1440
|
+
"ruleIndex": 39,
|
|
1441
|
+
"value": 3,
|
|
1442
|
+
"baseline": 3
|
|
1443
|
+
}
|
|
1444
|
+
]
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
1447
|
+
]
|
|
1448
|
+
}
|