Files
2025-11-29 17:51:02 +08:00

8.8 KiB

OWASP Top 10 to CWE Mapping with Semgrep Rules

Table of Contents

A01:2021 - Broken Access Control

CWE Mappings

  • CWE-22: Path Traversal
  • CWE-23: Relative Path Traversal
  • CWE-35: Path Traversal
  • CWE-352: Cross-Site Request Forgery (CSRF)
  • CWE-434: Unrestricted Upload of Dangerous File Type
  • CWE-639: Authorization Bypass Through User-Controlled Key
  • CWE-918: Server-Side Request Forgery (SSRF)

Semgrep Rules

# Path traversal detection
semgrep --config "r/python.lang.security.audit.path-traversal"

# Missing authorization checks
semgrep --config "r/generic.secrets.security.detected-generic-secret"

# CSRF protection
semgrep --config "r/javascript.express.security.audit.express-check-csurf-middleware-usage"

Detection Patterns

  • Unrestricted file access using user input
  • Missing or improper authorization checks
  • Insecure direct object references (IDOR)
  • Elevation of privilege vulnerabilities

A02:2021 - Cryptographic Failures

CWE Mappings

  • CWE-259: Use of Hard-coded Password
  • CWE-326: Inadequate Encryption Strength
  • CWE-327: Use of Broken/Risky Crypto Algorithm
  • CWE-328: Reversible One-Way Hash
  • CWE-330: Use of Insufficiently Random Values
  • CWE-780: Use of RSA Without OAEP

Semgrep Rules

# Weak crypto algorithms
semgrep --config "p/crypto"

# Hard-coded secrets
semgrep --config "p/secrets"

# Insecure random
semgrep --config "r/python.lang.security.audit.insecure-random"

Detection Patterns

  • Use of MD5, SHA1 for cryptographic purposes
  • Hard-coded passwords, API keys, tokens
  • Weak encryption algorithms (DES, RC4)
  • Insecure random number generation

A03:2021 - Injection

CWE Mappings

  • CWE-79: Cross-site Scripting (XSS)
  • CWE-89: SQL Injection
  • CWE-95: Improper Neutralization of Directives in Dynamically Evaluated Code (eval injection)
  • CWE-917: Expression Language Injection
  • CWE-943: Improper Neutralization of Special Elements in Data Query Logic

Semgrep Rules

# SQL Injection
semgrep --config "r/python.django.security.injection.sql"
semgrep --config "r/javascript.sequelize.security.audit.sequelize-injection"

# XSS
semgrep --config "r/javascript.express.security.audit.xss"
semgrep --config "r/python.flask.security.audit.template-xss"

# Command Injection
semgrep --config "r/python.lang.security.audit.dangerous-subprocess-use"

# Code Injection
semgrep --config "r/python.lang.security.audit.exec-used"
semgrep --config "r/javascript.lang.security.audit.eval-detected"

Detection Patterns

  • Unsafe SQL query construction
  • Unescaped user input in HTML context
  • OS command execution with user input
  • Use of eval() or similar dynamic code execution

A04:2021 - Insecure Design

CWE Mappings

  • CWE-209: Generation of Error Message with Sensitive Information
  • CWE-256: Unprotected Storage of Credentials
  • CWE-501: Trust Boundary Violation
  • CWE-522: Insufficiently Protected Credentials

Semgrep Rules

# Information disclosure
semgrep --config "r/python.flask.security.audit.debug-enabled"

# Missing security controls
semgrep --config "p/security-audit"

Detection Patterns

  • Debug mode enabled in production
  • Verbose error messages exposing internals
  • Missing rate limiting
  • Insecure default configurations

A05:2021 - Security Misconfiguration

CWE Mappings

  • CWE-16: Configuration
  • CWE-611: Improper Restriction of XML External Entity Reference
  • CWE-614: Sensitive Cookie in HTTPS Session Without 'Secure' Attribute
  • CWE-756: Missing Custom Error Page
  • CWE-776: Improper Restriction of Recursive Entity References in DTDs

Semgrep Rules

# XXE vulnerabilities
semgrep --config "r/python.lang.security.audit.avoid-lxml-in-xml-parsing"

# Insecure cookie settings
semgrep --config "r/javascript.express.security.audit.express-cookie-settings"

# CORS misconfiguration
semgrep --config "r/javascript.express.security.audit.express-cors-misconfiguration"

Detection Patterns

  • XML External Entity (XXE) vulnerabilities
  • Insecure cookie flags (missing Secure, HttpOnly, SameSite)
  • Open CORS policies
  • Unnecessary features enabled

A06:2021 - Vulnerable and Outdated Components

CWE Mappings

  • CWE-1035: Using Components with Known Vulnerabilities
  • CWE-1104: Use of Unmaintained Third Party Components

Semgrep Rules

# Known vulnerable dependencies
semgrep --config "p/supply-chain"

# Deprecated APIs
semgrep --config "p/owasp-top-ten"

Detection Patterns

  • Outdated library versions
  • Dependencies with known CVEs
  • Use of deprecated/unmaintained packages
  • Insecure package imports

A07:2021 - Identification and Authentication Failures

CWE Mappings

  • CWE-287: Improper Authentication
  • CWE-288: Authentication Bypass Using Alternate Path/Channel
  • CWE-306: Missing Authentication for Critical Function
  • CWE-307: Improper Restriction of Excessive Authentication Attempts
  • CWE-521: Weak Password Requirements
  • CWE-798: Use of Hard-coded Credentials
  • CWE-916: Use of Password Hash With Insufficient Computational Effort

Semgrep Rules

# Weak password hashing
semgrep --config "r/python.lang.security.audit.hashlib-md5-used"

# Missing authentication
semgrep --config "p/jwt"

# Session management
semgrep --config "r/javascript.express.security.audit.express-session-misconfiguration"

Detection Patterns

  • Weak password hashing (MD5, SHA1 without salt)
  • Missing multi-factor authentication
  • Predictable session identifiers
  • Credential stuffing vulnerabilities

A08:2021 - Software and Data Integrity Failures

CWE Mappings

  • CWE-345: Insufficient Verification of Data Authenticity
  • CWE-502: Deserialization of Untrusted Data
  • CWE-829: Inclusion of Functionality from Untrusted Control Sphere
  • CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes

Semgrep Rules

# Unsafe deserialization
semgrep --config "r/python.lang.security.audit.unsafe-pickle"
semgrep --config "r/javascript.lang.security.audit.unsafe-deserialization"

# Prototype pollution
semgrep --config "r/javascript.lang.security.audit.prototype-pollution"

Detection Patterns

  • Unsafe deserialization (pickle, YAML, JSON)
  • Missing integrity checks on updates
  • Prototype pollution in JavaScript
  • Unsafe code loading from external sources

A09:2021 - Security Logging and Monitoring Failures

CWE Mappings

  • CWE-117: Improper Output Neutralization for Logs
  • CWE-223: Omission of Security-relevant Information
  • CWE-532: Information Exposure Through Log Files
  • CWE-778: Insufficient Logging

Semgrep Rules

# Log injection
semgrep --config "r/python.lang.security.audit.logging-unsanitized-input"

# Sensitive data in logs
semgrep --config "p/secrets"

Detection Patterns

  • Log injection vulnerabilities
  • Sensitive data logged (passwords, tokens)
  • Missing security event logging
  • Insufficient audit trails

A10:2021 - Server-Side Request Forgery (SSRF)

CWE Mappings

  • CWE-918: Server-Side Request Forgery (SSRF)

Semgrep Rules

# SSRF detection
semgrep --config "r/python.requests.security.audit.requests-http-request"
semgrep --config "r/javascript.lang.security.audit.detect-unsafe-url"

Detection Patterns

  • Unvalidated URL fetching
  • Internal network access via user input
  • Missing URL validation
  • Bypassing access controls via SSRF

Using This Mapping

Scan for Specific OWASP Category

# Example: Scan for Injection vulnerabilities (A03)
semgrep --config "r/python.django.security.injection.sql" \
        --config "r/python.lang.security.audit.exec-used" \
        /path/to/code

Comprehensive OWASP Top 10 Scan

semgrep --config="p/owasp-top-ten" /path/to/code

Filter by CWE

# Scan and filter results by CWE
semgrep --config="p/security-audit" --json /path/to/code | \
  jq '.results[] | select(.extra.metadata.cwe == "CWE-89")'

References