AutoExtinguish: true across all 12 supported languages (value placeholders); dynamic SQL identifiers fail closed for manual allowlist mapping.
Commercial boundary: ciphermap immunity scan, immunity extinguish --apply, immunity attest (CycloneDX 1.6 CISA IBOM & OpenVEX 0.2.0), and ciphermap mcp require Tier B Enterprise Fleet. Offline proof and IBOM verification (--verify-proof, attest --verify) and the ciphermap demo sandbox run Free.
Dynamic SQL String Interpolation or Concatenation Across Polyglot Drivers
Severity: CRITICAL
Constructing SQL statements via string concatenation, format strings, or string templates mixes untrusted data with SQL syntax, enabling SQL injection across Go, TypeScript, JavaScript, Python, Java, Kotlin, C#, Rust, C/C++, Ruby, PHP, and Swift. Value parameters must use bound driver placeholders, and dynamic SQL identifiers (table names, column names, or sort directions) must be mapped through a compile-time constant allowlist. AutoExtinguish is supported across all 12 languages under Tier B Enterprise 4-Gate Vericoding when bound value placeholders apply.
Remediation checklist
- Go: pass static SQL with driver placeholders (? or $1) and separate variadic arguments to database/sql QueryContext/ExecContext; TypeScript & JavaScript: pass parameterized queries ('SELECT ... WHERE id = $1', [id]) instead of template literals.
- Python: pass DB-API placeholders (?, %s, :name) and a separate parameter tuple/dict to cursor.execute; Java & Kotlin: use PreparedStatement or JdbcTemplate with '?' bind parameters; C#: bind @p0 SqlParameter/DbParameter or EF Core ExecuteSqlInterpolated.
- Rust: use static query strings with sqlx::query(...).bind(val) or rusqlite params![val] instead of format!(...); C/C++ & Swift: use sqlite3_prepare_v2 + sqlite3_bind_text or PQexecParams instead of string concatenation or \(...) interpolation.
- Ruby: use ActiveRecord Hash conditions or '?' / ':name' bind placeholders (User.where('email = ?', email)) instead of "#{...}" interpolation; PHP: use PDO::prepare + execute([$val]) or mysqli::execute_query($sql, [$val]) instead of "$var" or '.' concatenation.
- For dynamic identifiers (table/column names or ORDER BY direction) where automatic extinguish declines, map caller keys through a strict switch/map allowlist returning compile-time constant SQL strings.
Illustrative Code Examples
These fragments explain migration direction. They are not complete applications or compiler-verified patches for your project.
Vulnerable — dynamic SQL interpolation (Go / Ruby / PHP)
// Go: fmt.Sprintf SQL interpolation
row := db.QueryRowContext(ctx, fmt.Sprintf("SELECT id FROM users WHERE email = '%s'", email))
# Ruby: ActiveRecord string interpolation
users = User.where("email = '#{params[:email]}'")
// PHP: PDO variable interpolation
$rows = $pdo->query("SELECT id FROM users WHERE email = '$email'");Remediated — bound driver placeholders (4-Gate Vericoding target)
// Go: bound placeholder
row := db.QueryRowContext(ctx, "SELECT id FROM users WHERE email = $1", email)
# Ruby: bound ActiveRecord placeholder
users = User.where("email = ?", params[:email])
// PHP: PDO prepared statement with bound parameter array
$stmt = $pdo->prepare('SELECT id FROM users WHERE email = ?');
$stmt->execute([$email]);Preview remediation proposals
Preview proposed changes free with ciphermap fix . --dry-run --offline --no-telemetry. Eligibility depends on the installed build, call shape, module format, and migration context. The bundled RSA fixture has a classical key-size candidate; that does not make it post-quantum secure. Persisted digests and unsupported contexts may be declined. Applying supported candidates requires an entitlement, explicit verifier consent, and the required project tools. Review the actual verification result before adopting a change.
View DevSecOps pricingOther rule families
Quantum-Vulnerable Public Key (RSA / DSA / DH)
PQC-GO-AST-003Quantum-Vulnerable Elliptic Curves (ECC) & Pre-Standard PQC Drafts
PQC-GO-AST-001Deprecated & Broken Cryptographic Primitives
IMM-PATH-001Unjailed Filesystem Path Traversal or Symlink Escape Across Polyglot I/O
IMM-CMD-001Dynamic Shell Command Execution Across Polyglot Process APIs
IMM-BOUND-001Unbounded Stream or Payload Allocation Across Polyglot Boundaries
IMM-DESER-001Unsafe Polymorphic Deserialization or Permissive Boundary Decoding
IMM-AUTH-001Unauthenticated or Unguarded State-Mutating Boundary Endpoint