● Zion Boggan
repos/Cyclops V2/brain/semgrep-rules/path-traversal.yaml
zionboggan.com ↗
110 lines · yaml
History for this file →
1
rules:
2
 
3
  - id: cyc-py-zipslip
4
    languages: [python]
5
    severity: ERROR
6
    message: >
7
      ZipFile.extractall / TarFile.extractall trusts archive entry names; a `../` entry escapes the
8
      target dir (zip-slip) -> arbitrary file WRITE, chainable to RCE (drop into a startup/.pth/cron
9
      path). IMPACT GATE: Family 7 -> Family 1.
10
    metadata:
11
      cwe: ["CWE-22: Path Traversal", "CWE-29: Path Traversal ZipSlip"]
12
      confidence: HIGH
13
      archetype: [ml-model-loaders, devops-infra]
14
      impact: arbitrary-file-write
15
    patterns:
16
      - pattern-either:
17
          - pattern: $Z.extractall(...)
18
          - pattern: $Z.extract(...)
19
          - pattern: zipfile.ZipFile(...).extractall(...)
20
          - pattern: tarfile.open(...).extractall(...)
21
 
22
  - id: cyc-py-file-open-tainted
23
    languages: [python]
24
    severity: WARNING
25
    message: >
26
      open() / send_file() with a non-literal path is a path-traversal CANDIDATE if the path is
27
      attacker-controlled and not normalized+allowlisted. IMPACT GATE: Family 7 (arbitrary file read).
28
      Confirm taint in Joern; literal paths are not matched.
29
    metadata:
30
      cwe: ["CWE-22: Path Traversal"]
31
      confidence: MEDIUM
32
      archetype: [devops-infra, ai-agent-mcp]
33
      impact: arbitrary-file-read
34
    patterns:
35
      - pattern-either:
36
          - pattern: open($P, ...)
37
          - pattern: open($P)
38
          - pattern: send_file($P, ...)
39
          - pattern: send_from_directory(..., $P, ...)
40
          - pattern: flask.send_file($P, ...)
41
      - metavariable-pattern:
42
          metavariable: $P
43
          patterns:
44
            - pattern-not: "\"...\""
45
            - pattern-not: "'...'"
46
 
47
  - id: cyc-js-fs-tainted
48
    languages: [javascript, typescript]
49
    severity: WARNING
50
    message: >
51
      fs read/write with a non-literal path is a path-traversal CANDIDATE. res.sendFile / res.download
52
      with a tainted path serves arbitrary files. IMPACT GATE: Family 7. Confirm taint in Joern.
53
    metadata:
54
      cwe: ["CWE-22: Path Traversal"]
55
      confidence: MEDIUM
56
      archetype: [electron-desktop, devops-infra]
57
      impact: arbitrary-file-read
58
    patterns:
59
      - pattern-either:
60
          - pattern: fs.readFile($P, ...)
61
          - pattern: fs.readFileSync($P, ...)
62
          - pattern: fs.createReadStream($P, ...)
63
          - pattern: fs.writeFile($P, ...)
64
          - pattern: fs.writeFileSync($P, ...)
65
          - pattern: $RES.sendFile($P, ...)
66
          - pattern: $RES.download($P, ...)
67
      - metavariable-pattern:
68
          metavariable: $P
69
          patterns:
70
            - pattern-not: "\"...\""
71
            - pattern-not: "'...'"
72
 
73
  - id: cyc-java-zipslip-file
74
    languages: [java]
75
    severity: ERROR
76
    message: >
77
      new File(dir, zipEntry.getName()) / Files.copy with an archive-controlled name is zip-slip ->
78
      arbitrary file write. Also flags File/FileInputStream built from request input. IMPACT GATE:
79
      Family 7 -> Family 1.
80
    metadata:
81
      cwe: ["CWE-22: Path Traversal", "CWE-29: Path Traversal ZipSlip"]
82
      confidence: MEDIUM
83
      archetype: [devops-infra]
84
      impact: arbitrary-file-write
85
    patterns:
86
      - pattern-either:
87
          - pattern: new File($DIR, $E.getName())
88
          - pattern: Files.copy($IN, $DEST, ...)
89
          - pattern: new FileOutputStream(new File($DIR, $E.getName()))
90
 
91
  - id: cyc-c-fopen-tainted
92
    languages: [c, cpp]
93
    severity: WARNING
94
    message: >
95
      fopen/open with a non-literal path is a path-traversal CANDIDATE in native parsers/servers.
96
      IMPACT GATE: Family 7. Confirm taint in Joern.
97
    metadata:
98
      cwe: ["CWE-22: Path Traversal"]
99
      confidence: MEDIUM
100
      archetype: [memory-unsafe-parsers, devops-infra]
101
      impact: arbitrary-file-read
102
    patterns:
103
      - pattern-either:
104
          - pattern: fopen($P, ...)
105
          - pattern: open($P, ...)
106
          - pattern: openat($D, $P, ...)
107
      - metavariable-pattern:
108
          metavariable: $P
109
          patterns:
110
            - pattern-not: "\"...\""