Skip to content

Conversation

@bdrodes
Copy link
Contributor

@bdrodes bdrodes commented Oct 8, 2025

These are some example queries that check the cryptography present in output from a java source repo. Again, these build on the existing examples both in java and in other CBOM and cryptographic issue checking codeQL queries:

InsecureNonceGeneration.ql - as before
InsecureNonceSource.ql - as before
KnownWeakKDFIterationCount.ql - as before
NonAESGCMCipher.ql - detects non-AES in GCM mode ciphers. Can be updated to be 'non AES256 in GCM mode' but this gives more alerts on inferred key lengths.
ReusedNonce.ql - as before
UnknownKDFIterationCount.ql - as before
WeakAsymmetric.ql - finds weak asymmetric RSA ciphers using key lengths < 2048
WeakBlockModes.ql - similar to NonAESGCM, this finds instances of known-bad block modes ECB, CFB, OFB, and CTR
WeakHashing.ql - finds potentially weak hashing instances using the whitelist of SHA256, SHA384, and SHA512 (though this is yet to be checked against SHA3 variants)
WeakKDFIterationCount.ql - as before
WeakKDFKeySize.ql - as before
WeakRSA.ql - an allternative method from WeakAsymmetric.ql, but functionally the same.
WeakSymmetricCiphers.ql - detects known-weak ciphers from a blocklist of DES, TripleDES, DoubleDES, RC2, RC4, IDEA, and Blowfish.

@bdrodes bdrodes requested a review from a team as a code owner October 8, 2025 14:22
Copilot AI review requested due to automatic review settings October 8, 2025 14:22
@bdrodes
Copy link
Contributor Author

bdrodes commented Oct 8, 2025

This PR is based on #20568, made a copy to be able to do my own quick edits.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds comprehensive Java cryptographic analysis queries to detect various security vulnerabilities and weak cryptographic practices. The changes include 11 new CodeQL analysis queries and updates to the underlying cryptographic models to improve consistency in naming conventions.

  • Adds 11 new analysis queries to detect weak cryptographic implementations including weak symmetric/asymmetric ciphers, poor block modes, weak hashing algorithms, and insecure key derivation functions
  • Updates cryptographic model naming from "Family" to "Type" for better consistency across elliptic curve and hash algorithm classifications
  • Modifies precision levels for some existing queries to improve analysis accuracy

Reviewed Changes

Copilot reviewed 16 out of 16 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
shared/quantum/codeql/quantum/experimental/Standardization.qll Renames elliptic curve type definitions from "Family" to "Type"
shared/quantum/codeql/quantum/experimental/Model.qll Updates method names and documentation to use "Type" instead of "Family"
java/ql/src/experimental/quantum/Analysis/*.ql Adds 11 new analysis queries for detecting cryptographic vulnerabilities
java/ql/lib/experimental/quantum/JCA.qll Updates method implementations to use new "Type" naming convention
cpp/ql/lib/experimental/quantum/OpenSSL/*.qll Updates C++ OpenSSL bindings to match new naming conventions

@bdrodes
Copy link
Contributor Author

bdrodes commented Oct 8, 2025

@nicolaswill this was meant to be a draft PR while I fix up the last issues, sorry about that. I don't see how I can move it back to draft, so I'll leave this open but ping when it is ready for final review.

…mpacts the insecure IV/Nonce query. Updated name of the Insecure nonce query to be InsecureIVorNonce
bdrodes and others added 6 commits October 8, 2025 12:55
…o fix false positives in the unknown IV/Nonce query). Add the unknown IV/Nonce query and associated test cases. Fix unknown IV/Nonce query to focus on cases where the oepration isn't known or the operation subtype is not encrypt or wrap.
…wn for it, and if so do not alert on non-secure random if it is tied to decryption
@nicolaswill
Copy link
Contributor

I'm hesitant to merge this into the out-of-box queries, as many of these are prescriptive about allowed/disallowed algorithms or thresholds for things like iteration count. I would suggest putting these into an Examples directory.

@nicolaswill nicolaswill marked this pull request as draft October 9, 2025 12:23
@@ -0,0 +1 @@
experimental/quantum/Examples/ReusedNonce.ql No newline at end of file

Check warning

Code scanning / CodeQL

Query test without inline test expectations Warning test

Query test does not use inline test expectations.
@bdrodes bdrodes marked this pull request as ready for review October 17, 2025 17:51
…with ql-for-ql, use formatted test for WeakAsymmetricKeyGenSize (add post processing in the qlref), misc expected files updated (test passed locally but on rerun vscode reports failures, known bug with vscode unit tests).
…assessments, altering a few queries weak/vuln/bad crypto to have qll files that can be accessed for other purposes, like graph generation. Also altering weak symmetric cipher to look for non-aes algorithms to be more comprehensive.
…es in an ArtifactNode to be used for graph generation to intercept nodes with known mac ordering issues, in order to format the node and output error messages in the graph.
HeeMa6

This comment was marked as spam.

@nicolaswill nicolaswill self-requested a review October 22, 2025 13:41
module GenericDataSourceFlow = TaintTracking::Global<GenericDataSourceFlowConfig>;

module ArtifactFlow = DataFlow::Global<ArtifactFlowConfig>;
module ArtifactFlow = TaintTracking::Global<ArtifactFlowConfig>;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an impactful change. We should do a DCA run.

… mac order expected results, fix erroneous change to ID for a slicing query, update model to specify elliptic curve type as a property, update associated graph test expected files, update the not_included_in_qls.expected to reflect all queries now under quantum.
@bdrodes bdrodes requested a review from a team as a code owner October 22, 2025 14:29
@nicolaswill
Copy link
Contributor

@bdrodes

 6472 tests passed; 4 tests failed:
  FAILED: /home/runner/work/semmle-code/semmle-code/ql/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptToMac.qlref
  FAILED: /home/runner/work/semmle-code/semmle-code/ql/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderMacOnEncryptPlaintext.qlref
  FAILED: /home/runner/work/semmle-code/semmle-code/ql/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/UnknownKDFIterationCount.qlref
  FAILED: /home/runner/work/semmle-code/semmle-code/ql/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/WeakKDFIterationCount.qlref

@nicolaswill
Copy link
Contributor

@bdrodes

 [INFO] pytest/lib/fixtures/environment.py:173 prepending to PATH: /Users/runner/work/semmle-code/semmle-code/target/intree/codeql  pytest  dist
-------------------- Captured differences (expected files) ---------------------
--- not_included_in_qls.expected
+++ not_included_in_qls.actual
@@ -233,10 +233,10 @@
 ql/java/ql/src/experimental/quantum/Examples/BrokenCrypto.ql
 ql/java/ql/src/experimental/quantum/Examples/InsecureIVorNonceSource.ql
 ql/java/ql/src/experimental/quantum/Examples/NonAESGCMCipher.ql
+ql/java/ql/src/experimental/quantum/Examples/ReusedNonce.ql
 ql/java/ql/src/experimental/quantum/Examples/TestAESGCMNonce.ql
 ql/java/ql/src/experimental/quantum/Examples/TestCipher.ql
 ql/java/ql/src/experimental/quantum/Examples/TestHash.ql
-ql/java/ql/src/experimental/quantum/Examples/ReusedNonce.ql
 ql/java/ql/src/experimental/quantum/Examples/UnknownHash.ql
 ql/java/ql/src/experimental/quantum/Examples/UnknownIVorNonceSource.ql
 ql/java/ql/src/experimental/quantum/Examples/UnknownKDFIterationCount.ql
----------------------------- Captured stdout call -----------------------------

…ng a line to see if this forces the test to pass. The test is off by one column in the piepline
@bdrodes
Copy link
Contributor Author

bdrodes commented Oct 22, 2025

@bdrodes

 6472 tests passed; 4 tests failed:
  FAILED: /home/runner/work/semmle-code/semmle-code/ql/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderDecryptToMac.qlref
  FAILED: /home/runner/work/semmle-code/semmle-code/ql/java/ql/test/experimental/query-tests/quantum/examples/BadMacUse/BadMacOrderMacOnEncryptPlaintext.qlref
  FAILED: /home/runner/work/semmle-code/semmle-code/ql/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/UnknownKDFIterationCount.qlref
  FAILED: /home/runner/work/semmle-code/semmle-code/ql/java/ql/test/experimental/query-tests/quantum/examples/WeakOrUnknownKDFIterationCount/WeakKDFIterationCount.qlref

This is impossible to fix. The tests in the PR are off by one for the column, and locally that's just not true for some reason. I assume a carriage return or something but there are carriage returns in all my code, and that doesn't cause an issue. If we are forced to I can change it locally and submit potentially failing tests if run locally for others, but I don't know what to do

Fixed this issue. Some how my Vscode editor had two files set to CRLF line endings in the editor, and since my git settings don't push up CRLF, you won't see any diff/issue in the test code, but local runs may differ from server runs... very gnarly issue, but fixed. I have no idea how that setting was changed.

@nicolaswill nicolaswill merged commit c7ef8a5 into github:main Oct 22, 2025
45 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants