UNPKG

mcp-server-semgrep

Version:

MCP Server for Semgrep Integration - static code analysis with AI

441 lines (440 loc) 12.4 kB
rules: - id: path-traversal-open message: >- Found request data in a call to 'open'. Ensure the request data is validated or sanitized, otherwise it could result in path traversal attacks and therefore sensitive data being leaked. To mitigate, consider using os.path.abspath or os.path.realpath or the pathlib library. metadata: cwe: - "CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')" owasp: - A05:2017 - Broken Access Control - A01:2021 - Broken Access Control references: - https://owasp.org/www-community/attacks/Path_Traversal category: security technology: - django cwe2022-top25: true cwe2021-top25: true subcategory: - vuln likelihood: MEDIUM impact: MEDIUM confidence: MEDIUM languages: [python] severity: WARNING patterns: - pattern-inside: | def $FUNC(...): ... - pattern-either: - pattern: open(..., request.$W.get(...), ...) - pattern: open(..., $S.format(..., request.$W.get(...), ...), ...) - pattern: open(..., $S % request.$W.get(...), ...) - pattern: open(..., f"...{request.$W.get(...)}...", ...) - pattern: | $DATA = request.$W.get(...) ... open(..., $DATA, ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W.get(...) ... open(..., $STR.format(..., $DATA, ...), ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = $STR.format(..., $DATA, ...) ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = $STR.format(..., $DATA, ...) ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W.get(...) ... open(..., $STR % $DATA, ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = $STR % $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = $STR % $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W.get(...) ... open(..., f"...{$DATA}...", ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = f"...{$DATA}..." ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = f"...{$DATA}..." ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W.get(...) ... open(..., $STR + $DATA, ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = $STR + $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W.get(...) ... $INTERM = $STR + $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: $A = open(..., request.$W.get(...), ...) - pattern: $A = open(..., $S.format(..., request.$W.get(...), ...), ...) - pattern: $A = open(..., $S % request.$W.get(...), ...) - pattern: $A = open(..., f"...{request.$W.get(...)}...", ...) - pattern: return open(..., request.$W.get(...), ...) - pattern: return open(..., $S.format(..., request.$W.get(...), ...), ...) - pattern: return open(..., $S % request.$W.get(...), ...) - pattern: return open(..., f"...{request.$W.get(...)}...", ...) - pattern: | $DATA = request.$W.get(...) ... with open(..., $DATA, ...) as $FD: ... - pattern: open(..., request.$W(...), ...) - pattern: open(..., $S.format(..., request.$W(...), ...), ...) - pattern: open(..., $S % request.$W(...), ...) - pattern: open(..., f"...{request.$W(...)}...", ...) - pattern: | $DATA = request.$W(...) ... open(..., $DATA, ...) - pattern: | $DATA = request.$W(...) ... $INTERM = $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W(...) ... $INTERM = $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W(...) ... open(..., $STR.format(..., $DATA, ...), ...) - pattern: | $DATA = request.$W(...) ... $INTERM = $STR.format(..., $DATA, ...) ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W(...) ... $INTERM = $STR.format(..., $DATA, ...) ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W(...) ... open(..., $STR % $DATA, ...) - pattern: | $DATA = request.$W(...) ... $INTERM = $STR % $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W(...) ... $INTERM = $STR % $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W(...) ... open(..., f"...{$DATA}...", ...) - pattern: | $DATA = request.$W(...) ... $INTERM = f"...{$DATA}..." ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W(...) ... $INTERM = f"...{$DATA}..." ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W(...) ... open(..., $STR + $DATA, ...) - pattern: | $DATA = request.$W(...) ... $INTERM = $STR + $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W(...) ... $INTERM = $STR + $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: $A = open(..., request.$W(...), ...) - pattern: $A = open(..., $S.format(..., request.$W(...), ...), ...) - pattern: $A = open(..., $S % request.$W(...), ...) - pattern: $A = open(..., f"...{request.$W(...)}...", ...) - pattern: return open(..., request.$W(...), ...) - pattern: return open(..., $S.format(..., request.$W(...), ...), ...) - pattern: return open(..., $S % request.$W(...), ...) - pattern: return open(..., f"...{request.$W(...)}...", ...) - pattern: | $DATA = request.$W(...) ... with open(..., $DATA, ...) as $FD: ... - pattern: open(..., request.$W[...], ...) - pattern: open(..., $S.format(..., request.$W[...], ...), ...) - pattern: open(..., $S % request.$W[...], ...) - pattern: open(..., f"...{request.$W[...]}...", ...) - pattern: | $DATA = request.$W[...] ... open(..., $DATA, ...) - pattern: | $DATA = request.$W[...] ... $INTERM = $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W[...] ... $INTERM = $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W[...] ... open(..., $STR.format(..., $DATA, ...), ...) - pattern: | $DATA = request.$W[...] ... $INTERM = $STR.format(..., $DATA, ...) ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W[...] ... $INTERM = $STR.format(..., $DATA, ...) ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W[...] ... open(..., $STR % $DATA, ...) - pattern: | $DATA = request.$W[...] ... $INTERM = $STR % $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W[...] ... $INTERM = $STR % $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W[...] ... open(..., f"...{$DATA}...", ...) - pattern: | $DATA = request.$W[...] ... $INTERM = f"...{$DATA}..." ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W[...] ... $INTERM = f"...{$DATA}..." ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W[...] ... open(..., $STR + $DATA, ...) - pattern: | $DATA = request.$W[...] ... $INTERM = $STR + $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W[...] ... $INTERM = $STR + $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: $A = open(..., request.$W[...], ...) - pattern: $A = open(..., $S.format(..., request.$W[...], ...), ...) - pattern: $A = open(..., $S % request.$W[...], ...) - pattern: $A = open(..., f"...{request.$W[...]}...", ...) - pattern: return open(..., request.$W[...], ...) - pattern: return open(..., $S.format(..., request.$W[...], ...), ...) - pattern: return open(..., $S % request.$W[...], ...) - pattern: return open(..., f"...{request.$W[...]}...", ...) - pattern: | $DATA = request.$W[...] ... with open(..., $DATA, ...) as $FD: ... - pattern: open(..., request.$W, ...) - pattern: open(..., $S.format(..., request.$W, ...), ...) - pattern: open(..., $S % request.$W, ...) - pattern: open(..., f"...{request.$W}...", ...) - pattern: | $DATA = request.$W ... open(..., $DATA, ...) - pattern: | $DATA = request.$W ... $INTERM = $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W ... $INTERM = $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W ... open(..., $STR.format(..., $DATA, ...), ...) - pattern: | $DATA = request.$W ... $INTERM = $STR.format(..., $DATA, ...) ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W ... $INTERM = $STR.format(..., $DATA, ...) ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W ... open(..., $STR % $DATA, ...) - pattern: | $DATA = request.$W ... $INTERM = $STR % $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W ... $INTERM = $STR % $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W ... open(..., f"...{$DATA}...", ...) - pattern: | $DATA = request.$W ... $INTERM = f"...{$DATA}..." ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W ... $INTERM = f"...{$DATA}..." ... with open(..., $INTERM, ...) as $FD: ... - pattern: | $DATA = request.$W ... open(..., $STR + $DATA, ...) - pattern: | $DATA = request.$W ... $INTERM = $STR + $DATA ... open(..., $INTERM, ...) - pattern: | $DATA = request.$W ... $INTERM = $STR + $DATA ... with open(..., $INTERM, ...) as $FD: ... - pattern: $A = open(..., request.$W, ...) - pattern: $A = open(..., $S.format(..., request.$W, ...), ...) - pattern: $A = open(..., $S % request.$W, ...) - pattern: $A = open(..., f"...{request.$W}...", ...) - pattern: return open(..., request.$W, ...) - pattern: return open(..., $S.format(..., request.$W, ...), ...) - pattern: return open(..., $S % request.$W, ...) - pattern: return open(..., f"...{request.$W}...", ...) - pattern: | $DATA = request.$W ... with open(..., $DATA, ...) as $FD: ...