Cipher.getInstance("secureParamAES".substring(11));
"AES"defaults to ECB · insecure

Hidden in plain sight.

A substring that spells an insecure cipher. Would your crypto-detector catch it?

MASC · IEEE S&P ’22

9 crypto-detectors. 19 flaws.

Then we raised the bar.

The journal extension

Bigger in every direction.

MISUSE TAXONOMY
105→105

4 new cases from 19 sources, 2019–2022

MUTATION OPERATORS
12→12

7 new ways to disguise a misuse

CRYPTO-DETECTORS
9→9

5 new industry tools, plus updated versions

MUTANTS
20,303→20,303

30,236 new, from 15 new open-source apps

Six new flaws. One blind spot.

How a parameter gets its value: 13 of 14 detectors fail to resolve it.

F20STATIC IV BYTES

Constant bytes as an IV

new IvParameterSpec(
  "12345678".getBytes(), 0, 8)
F21CHAR ARRAY

Built from a char array

char[] v = "DES".toCharArray();
getInstance(String.valueOf(v))
F22SUBSTRING

Cut from a longer string

getInstance(
  "secureParamAES".substring(11))
F23OBJECT SENSITIVITY

Safe object, unsafe value

secure = notsecure;
getInstance(secure)
F24METHOD BUILDER

Spelled by method calls

String A() { return "D"; }
String B() { return "ES"; }  A() + B()
F25NESTED CONDITIONALS

Buried in nested branches

if (i == 0) { if (i == 0) {
  if (i == 0) { c = "AES"; } … } }
0
undocumented flaws across 14 crypto-detectors
122 / 196flaw instances found only through mutation
6 fixedflaws since our S&P ’22 disclosures
19 + 6prior flaws, plus six new ones

No detector is immune.

The flaws reach tools from the open-source community, industry, and research alike.

CryptoGuardCogniCryptXanitizerToolX SpotBugs + FindSecBugsQARKLGTMGitHub Code SecurityShiftLeft Scan SonarQubeSnykCodigaDeepSourceAmazon CodeGuru Security

Mutation-based Evaluation of Cryptographic API-Misuse Detectors

Amit Seal Ami · Scott Marsden · Kevin Moran · Denys Poshyvanyk · Adwait Nadkarni
TOPS 2026 · ACM Transactions on Privacy and Security