mirror of
https://github.com/github/codeql.git
synced 2025-12-22 19:56:32 +01:00
Adding example alerts
This commit is contained in:
committed by
Josh Brown
parent
4c9cc5a21f
commit
6d7ac8de28
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* @name Unknown key generation key size
|
||||
* @description
|
||||
* @id cpp/unknown-asymmetric-key-gen-size
|
||||
* @kind problem
|
||||
* @problem.severity error
|
||||
* @precision high
|
||||
* @tags security
|
||||
* external/cwe/cwe-326
|
||||
*/
|
||||
import cpp
|
||||
|
||||
import experimental.crypto.Concepts
|
||||
|
||||
from AsymmetricKeyGeneration op, AsymmetricAlgorithm alg
|
||||
where
|
||||
alg = op.getAlgorithm() and
|
||||
not alg instanceof EllipticCurveAlgorithm and
|
||||
not exists(op.getKeySizeInBits(alg))
|
||||
select op, "Use of unknown asymmetric key size for algorithm $@", alg, alg.getName().toString()
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/**
|
||||
* @name Weak asymmetric key generation key size (< 2048 bits)
|
||||
* @description
|
||||
* @id cpp/weak-asymmetric-key-gen-size
|
||||
* @kind problem
|
||||
* @problem.severity error
|
||||
* @precision high
|
||||
* @tags security
|
||||
* external/cwe/cwe-326
|
||||
*/
|
||||
import cpp
|
||||
|
||||
import experimental.crypto.Concepts
|
||||
|
||||
from AsymmetricKeyGeneration op, AsymmetricAlgorithm alg, Expr configSrc, int size
|
||||
where
|
||||
alg = op.getAlgorithm() and
|
||||
not alg instanceof EllipticCurveAlgorithm and
|
||||
configSrc = op.getKeyConfigurationSource(alg) and
|
||||
size = configSrc.getValue().toInt() and
|
||||
size < 2048
|
||||
select op, "Use of weak asymmetric key size (in bits) " + size + " configured at $@ for algorithm $@", configSrc, configSrc.toString(), alg, alg.getName().toString()
|
||||
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* @name Weak block mode
|
||||
* @description Finds uses of symmetric encryption block modes that are weak, obsolete, or otherwise unaccepted.
|
||||
* @id cpp/weak-block-mode
|
||||
* @kind problem
|
||||
* @problem.severity error
|
||||
* @precision high
|
||||
* @tags security
|
||||
* external/cwe/cwe-327
|
||||
*/
|
||||
import cpp
|
||||
import experimental.crypto.Concepts
|
||||
|
||||
from BlockModeAlgorithm alg, string name, string msg, Expr confSink
|
||||
where
|
||||
exists(string tmpMsg |
|
||||
(
|
||||
(name = alg.getBlockModeName() and name = unknownAlgorithm() and tmpMsg = "Use of unrecognized block mode algorithm.")
|
||||
or
|
||||
(
|
||||
name != unknownAlgorithm() and
|
||||
name = alg.getBlockModeName() and
|
||||
not name = ["CBC","CTS","XTS"] and
|
||||
tmpMsg = "Use of weak block mode algorithm " + name + "."
|
||||
)
|
||||
)
|
||||
and
|
||||
if alg.hasConfigurationSink() and alg.configurationSink() != alg
|
||||
then (confSink = alg.configurationSink() and msg = tmpMsg + " Algorithm used at sink: $@.")
|
||||
else (confSink = alg and msg = tmpMsg)
|
||||
)
|
||||
select alg, msg, confSink, confSink.toString()
|
||||
@@ -0,0 +1,38 @@
|
||||
/**
|
||||
* @name Weak elliptic curve
|
||||
* @description Finds uses of weak, unknown, or otherwise unaccepted elliptic curve algorithms.
|
||||
* @id cpp/weak-elliptic-curve
|
||||
* @kind problem
|
||||
* @problem.severity error
|
||||
* @precision high
|
||||
* @tags security
|
||||
* external/cwe/cwe-327
|
||||
*/
|
||||
import cpp
|
||||
import experimental.crypto.Concepts
|
||||
|
||||
from EllipticCurveAlgorithm alg, string name, string msg, Expr confSink
|
||||
where
|
||||
exists(string tmpMsg |
|
||||
(
|
||||
(name = alg.getCurveName() and name = unknownAlgorithm() and tmpMsg = "Use of unrecognized curve algorithm.")
|
||||
or
|
||||
(
|
||||
name != unknownAlgorithm() and
|
||||
name = alg.getCurveName() and
|
||||
not name = ["SECP256R1", "PRIME256V1",//P-256
|
||||
"SECP384R1", //P-384
|
||||
"SECP521R1", //P-521
|
||||
"NUMSP256T1",
|
||||
"NUMSP384T1",
|
||||
"NUMSP512T1",
|
||||
"ED25519", "X25519"] and
|
||||
tmpMsg = "Use of weak curve algorithm " + name + "."
|
||||
)
|
||||
)
|
||||
and
|
||||
if alg.hasConfigurationSink() and alg.configurationSink() != alg
|
||||
then (confSink = alg.configurationSink() and msg = tmpMsg + " Algorithm used at sink: $@.")
|
||||
else (confSink = alg and msg = tmpMsg)
|
||||
)
|
||||
select alg, msg, confSink, confSink.toString()
|
||||
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* @name Weak cryptography
|
||||
* @description Finds explicit uses of symmetric encryption algorithms that are weak, unknown, or otherwise unaccepted.
|
||||
* @kind problem
|
||||
* @id cpp/weak-crypto/banned-encryption-algorithms
|
||||
* @problem.severity error
|
||||
* @precision high
|
||||
* @tags security
|
||||
* external/cwe/cwe-327
|
||||
*/
|
||||
|
||||
import cpp
|
||||
import experimental.crypto.Concepts
|
||||
|
||||
|
||||
from SymmetricEncryptionAlgorithm alg, Expr confSink, string msg
|
||||
where
|
||||
exists (string resMsg |
|
||||
(
|
||||
if alg.getEncryptionName() = unknownAlgorithm()
|
||||
then (
|
||||
alg instanceof Literal and resMsg = "Use of unrecognized symmetric encryption algorithm: " + alg.(Literal).getValueText().toString() + "."
|
||||
or
|
||||
not alg instanceof Literal and resMsg = "Use of unrecognized symmetric encryption algorithm."
|
||||
)
|
||||
else (not alg.getEncryptionName().matches("AES%") and resMsg = "Use of banned symmetric encryption algorithm: " + alg.getEncryptionName() + ".")
|
||||
)
|
||||
and
|
||||
(
|
||||
if alg.hasConfigurationSink() and alg.configurationSink() != alg
|
||||
then (confSink = alg.configurationSink() and msg = resMsg + " Algorithm used at sink: $@.")
|
||||
else (confSink = alg and msg = resMsg)
|
||||
)
|
||||
)
|
||||
select alg, msg, confSink, confSink.toString()
|
||||
36
cpp/ql/src/experimental/crypto/example_alerts/WeakHashes.ql
Normal file
36
cpp/ql/src/experimental/crypto/example_alerts/WeakHashes.ql
Normal file
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
* @name Weak cryptography
|
||||
* @description Finds explicit uses of cryptographic hash algorithms that are weak and obsolete.
|
||||
* @kind problem
|
||||
* @id cpp/weak-crypto/banned-hash-algorithms
|
||||
* @problem.severity error
|
||||
* @precision high
|
||||
* @tags security
|
||||
* external/cwe/cwe-327
|
||||
*/
|
||||
|
||||
import cpp
|
||||
import semmle.code.cpp.dataflow.DataFlow as ASTDataFlow
|
||||
import experimental.crypto.Concepts
|
||||
|
||||
from HashAlgorithm alg, Expr confSink, string msg
|
||||
where
|
||||
exists(string name, string msgTmp | name = alg.getHashName() |
|
||||
not name = ["SHA256", "SHA384", "SHA512"] and
|
||||
(
|
||||
if name = unknownAlgorithm()
|
||||
then
|
||||
(
|
||||
not alg instanceof Literal and msgTmp = "Use of unrecognized hash algorithm."
|
||||
or
|
||||
alg instanceof Literal and msgTmp = "Use of unrecognized hash algorithm: " + alg.(Literal).getValueText().toString() + "."
|
||||
|
||||
)
|
||||
else msgTmp = "Use of banned hash algorithm " + name + "."
|
||||
)
|
||||
and
|
||||
if alg.hasConfigurationSink() and alg.configurationSink() != alg
|
||||
then (confSink = alg.configurationSink() and msg = msgTmp + " Algorithm used at sink: $@.")
|
||||
else (confSink = alg and msg = msgTmp)
|
||||
)
|
||||
select alg, msg, confSink, confSink.toString()
|
||||
Reference in New Issue
Block a user