penthera 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/CHANGELOG.md +315 -0
  2. package/README.md +139 -76
  3. package/SECURITY.md +8 -6
  4. package/docs/examples/pr-dependency-review.yml +1 -1
  5. package/lib/adaptive-probes.js +3 -3
  6. package/lib/advisories/evidence.js +248 -0
  7. package/lib/advisories/index.js +228 -0
  8. package/lib/advisories/products.js +83 -0
  9. package/lib/advisories/versions.js +65 -0
  10. package/lib/agents/hidden-content.js +122 -11
  11. package/lib/agents/index.js +26 -6
  12. package/lib/agents/lock.js +33 -5
  13. package/lib/agents/rules.js +33 -4
  14. package/lib/compliance/index.js +4 -4
  15. package/lib/crawler.js +12 -15
  16. package/lib/deps/capabilities.js +21 -5
  17. package/lib/deps/findings.js +309 -0
  18. package/lib/deps/index.js +13 -272
  19. package/lib/deps/iocs.js +74 -0
  20. package/lib/deps/lockfile.js +3 -8
  21. package/lib/deps/online.js +8 -3
  22. package/lib/deps/popular-packages.json.gz +0 -0
  23. package/lib/deps/popular-pypi.json.gz +0 -0
  24. package/lib/deps/python/capabilities.js +16 -3
  25. package/lib/deps/python/index.js +5 -1
  26. package/lib/deps/python/lockfiles.js +11 -5
  27. package/lib/deps/python/source.js +75 -26
  28. package/lib/deps/python/toml.js +15 -3
  29. package/lib/deps/source.js +28 -9
  30. package/lib/deps/typosquat.js +30 -5
  31. package/lib/fix/apply.js +253 -34
  32. package/lib/fix/index.js +7 -4
  33. package/lib/fix/model.js +25 -5
  34. package/lib/fix/util.js +6 -2
  35. package/lib/fuzzer.js +3 -3
  36. package/lib/git.js +65 -0
  37. package/lib/hook/index.js +157 -73
  38. package/lib/hook/policy.js +10 -4
  39. package/lib/install/index.js +4 -7
  40. package/lib/machine.js +0 -13
  41. package/lib/memory/store.js +11 -4
  42. package/lib/nuclei-loader.js +0 -25
  43. package/lib/owasp-wstg.js +4 -0
  44. package/lib/plugins.js +1 -1
  45. package/lib/provenance.js +1 -0
  46. package/lib/recon.js +12 -31
  47. package/lib/references.json +224 -0
  48. package/lib/retirejs.js +4 -4
  49. package/lib/rules/advisories/advisories.json +186 -0
  50. package/lib/rules/advisories/eol.json +413 -0
  51. package/lib/rules/advisories/pack.json +20 -0
  52. package/lib/rules/advisories/pack.json.sig +6 -0
  53. package/lib/rules/allowed_signers +13 -0
  54. package/lib/rules/core/agent-exec.json +29 -0
  55. package/lib/rules/core/agent-instructions.json +17 -0
  56. package/lib/rules/core/pack.json +30 -0
  57. package/lib/rules/core/pack.json.sig +6 -0
  58. package/lib/rules/core/secrets.json +161 -0
  59. package/lib/rules/core/templates.json +52 -0
  60. package/lib/rules/index.js +107 -0
  61. package/lib/rules/ioc-2025-2026/files.json +43 -0
  62. package/lib/rules/ioc-2025-2026/hosts.json +35 -0
  63. package/lib/rules/ioc-2025-2026/pack.json +25 -0
  64. package/lib/rules/ioc-2025-2026/pack.json.sig +6 -0
  65. package/lib/rules/ioc-2025-2026/packages.json +1048 -0
  66. package/lib/rules/pack.js +452 -0
  67. package/lib/rules/regex-guard.js +81 -9
  68. package/lib/rules/sshsig.js +205 -0
  69. package/lib/templates.js +24 -20
  70. package/lib/tmp.js +21 -0
  71. package/lib/whitebox/frameworks.js +1 -1
  72. package/lib/whitebox/secrets.js +117 -41
  73. package/package.json +12 -4
  74. package/scripts/rules/build-pack.mjs +80 -0
  75. package/scripts/rules/check-bundled.mjs +30 -0
  76. package/scripts/rules/sign-pack.sh +32 -0
  77. package/skills/penthera/SKILL.md +16 -15
  78. package/src/agent/git.js +147 -14
  79. package/src/agent/loop.js +165 -46
  80. package/src/cli/agent.js +11 -5
  81. package/src/cli/deps.js +0 -2
  82. package/src/cli/detect.js +14 -7
  83. package/src/cli/fix.js +26 -8
  84. package/src/cli/hook.js +2 -1
  85. package/src/cli/onboarding.js +14 -6
  86. package/src/cli/report-outputs.js +1 -0
  87. package/src/cli/rules.js +144 -0
  88. package/src/cli/ui.js +43 -10
  89. package/src/cli.js +24 -1
  90. package/src/report/evidence.js +105 -21
  91. package/src/report/footer.js +1 -1
  92. package/src/report/md-escape.js +8 -0
  93. package/src/scan-repo.js +6 -0
  94. package/src/scan-url.js +11 -3
  95. package/src/ui/api/data.js +39 -6
  96. package/src/ui/api/routes.js +44 -11
  97. package/src/ui/api/runs.js +32 -7
  98. package/src/ui/security.js +20 -23
  99. package/src/ui/server.js +52 -27
  100. package/src/ui/static/app.css +583 -213
  101. package/src/ui/static/favicon.svg +1 -1
  102. package/src/ui/static/fonts/DepartureMono-LICENSE.txt +93 -0
  103. package/src/ui/static/fonts/DepartureMono-Regular.woff2 +0 -0
  104. package/src/ui/static/index.html +5 -4
  105. package/src/ui/static/js/api.js +114 -6
  106. package/src/ui/static/js/app.js +81 -42
  107. package/src/ui/static/js/center.js +246 -133
  108. package/src/ui/static/js/charts.js +99 -18
  109. package/src/ui/static/js/copy.js +68 -9
  110. package/src/ui/static/js/dialog.js +152 -0
  111. package/src/ui/static/js/left.js +23 -60
  112. package/src/ui/static/js/menubar.js +170 -0
  113. package/src/ui/static/js/onboarding.js +104 -0
  114. package/src/ui/static/js/panels.js +186 -0
  115. package/src/ui/static/js/right.js +69 -188
  116. package/src/ui/static/js/state.js +36 -5
  117. package/src/ui/static/logo.svg +10 -0
  118. package/src/ui/static/mark.svg +3 -0
  119. package/src/utils/http.js +162 -13
  120. package/docs/METHODOLOGY.md +0 -375
  121. package/docs/commands/README.md +0 -24
  122. package/docs/commands/action.md +0 -21
  123. package/docs/commands/agents.md +0 -38
  124. package/docs/commands/deps.md +0 -115
  125. package/docs/commands/fix.md +0 -53
  126. package/docs/commands/hook.md +0 -69
  127. package/docs/commands/init.md +0 -114
  128. package/docs/commands/install.md +0 -53
  129. package/docs/commands/scan.md +0 -100
  130. package/docs/commands/skill.md +0 -58
  131. package/docs/compare/README.md +0 -25
  132. package/docs/compare/github.md +0 -60
  133. package/docs/compare/semgrep.md +0 -54
  134. package/docs/compare/snyk.md +0 -62
  135. package/docs/compare/socket.md +0 -78
  136. package/docs/compare/zap.md +0 -59
  137. package/docs/compliance-cra.md +0 -141
  138. package/docs/compliance-nis2.md +0 -168
  139. package/docs/dashboard.md +0 -187
  140. package/docs/evidence.md +0 -162
  141. package/docs/funding/due-diligence-checklist.md +0 -79
  142. package/docs/funding/nlnet-ngi-zero-draft.md +0 -273
  143. package/docs/funding/partner-one-pager.md +0 -84
  144. package/docs/funding/sponsor-tiers.md +0 -81
  145. package/docs/index.md +0 -81
  146. package/docs/internal-audit.md +0 -83
  147. package/docs/local-loop.md +0 -276
  148. package/docs/marketing.md +0 -151
  149. package/docs/owasp-wstg-coverage.md +0 -79
  150. package/docs/plan.md +0 -102
  151. package/docs/privacy.md +0 -38
  152. package/docs/references.bib +0 -559
  153. package/docs/references.md +0 -119
  154. package/docs/release-plan.md +0 -228
  155. package/docs/research/socket-positioning-notes.md +0 -183
  156. package/docs/use-cases/README.md +0 -14
  157. package/docs/use-cases/agencies.md +0 -71
  158. package/docs/use-cases/ai-coding-teams.md +0 -81
  159. package/docs/use-cases/eu-sme-compliance.md +0 -68
  160. package/docs/use-cases/open-source-maintainers.md +0 -75
  161. package/docs/use-cases/solo-founder.md +0 -65
  162. package/lib/deps/popular-packages.json +0 -1
  163. package/lib/deps/popular-pypi.json +0 -1
@@ -0,0 +1,413 @@
1
+ {
2
+ "kind": "runtime-eol",
3
+ "rules": [
4
+ {
5
+ "id": "php-eol",
6
+ "product": "php",
7
+ "branches": [
8
+ {
9
+ "branch": "8.5",
10
+ "eol": "2029-12-31"
11
+ },
12
+ {
13
+ "branch": "8.4",
14
+ "eol": "2028-12-31"
15
+ },
16
+ {
17
+ "branch": "8.3",
18
+ "eol": "2027-12-31"
19
+ },
20
+ {
21
+ "branch": "8.2",
22
+ "eol": "2026-12-31"
23
+ },
24
+ {
25
+ "branch": "8.1",
26
+ "eol": "2025-12-31"
27
+ },
28
+ {
29
+ "branch": "8.0",
30
+ "eol": "2023-11-26"
31
+ },
32
+ {
33
+ "branch": "7.4",
34
+ "eol": "2022-11-28"
35
+ },
36
+ {
37
+ "branch": "7.3",
38
+ "eol": "2021-12-06"
39
+ },
40
+ {
41
+ "branch": "7.2",
42
+ "eol": "2020-11-30"
43
+ },
44
+ {
45
+ "branch": "7.1",
46
+ "eol": "2019-12-01"
47
+ },
48
+ {
49
+ "branch": "7.0",
50
+ "eol": "2019-01-10"
51
+ },
52
+ {
53
+ "branch": "5.6",
54
+ "eol": "2018-12-31"
55
+ },
56
+ {
57
+ "branch": "5.5",
58
+ "eol": "2016-07-21"
59
+ },
60
+ {
61
+ "branch": "5.4",
62
+ "eol": "2015-09-14"
63
+ },
64
+ {
65
+ "branch": "5.3",
66
+ "eol": "2014-08-14"
67
+ }
68
+ ],
69
+ "source": "https://www.php.net/eol.php",
70
+ "date": "2026-10-21",
71
+ "confidence": "confirmed",
72
+ "description": "End-of-life dates from php.net's Unsupported Branches page; supported lines and their security-support end dates from https://www.php.net/supported-versions.php (8.2 until 2026-12-31, 8.3 until 2027-12-31, 8.4 until 2028-12-31, 8.5 until 2029-12-31). Checked 2026-10-21.",
73
+ "references": [
74
+ "phpsupported",
75
+ "endoflifedate"
76
+ ]
77
+ },
78
+ {
79
+ "id": "nodejs-eol",
80
+ "product": "nodejs",
81
+ "branches": [
82
+ {
83
+ "branch": "26",
84
+ "eol": "2029-04-30"
85
+ },
86
+ {
87
+ "branch": "25",
88
+ "eol": "2026-06-01"
89
+ },
90
+ {
91
+ "branch": "24",
92
+ "eol": "2028-04-30"
93
+ },
94
+ {
95
+ "branch": "23",
96
+ "eol": "2025-06-01"
97
+ },
98
+ {
99
+ "branch": "22",
100
+ "eol": "2027-04-30"
101
+ },
102
+ {
103
+ "branch": "21",
104
+ "eol": "2024-06-01"
105
+ },
106
+ {
107
+ "branch": "20",
108
+ "eol": "2026-04-30"
109
+ },
110
+ {
111
+ "branch": "19",
112
+ "eol": "2023-06-01"
113
+ },
114
+ {
115
+ "branch": "18",
116
+ "eol": "2025-04-30"
117
+ },
118
+ {
119
+ "branch": "17",
120
+ "eol": "2022-06-01"
121
+ },
122
+ {
123
+ "branch": "16",
124
+ "eol": "2023-09-11"
125
+ },
126
+ {
127
+ "branch": "15",
128
+ "eol": "2021-06-01"
129
+ },
130
+ {
131
+ "branch": "14",
132
+ "eol": "2023-04-30"
133
+ },
134
+ {
135
+ "branch": "13",
136
+ "eol": "2020-06-01"
137
+ },
138
+ {
139
+ "branch": "12",
140
+ "eol": "2022-04-30"
141
+ },
142
+ {
143
+ "branch": "11",
144
+ "eol": "2019-06-30"
145
+ },
146
+ {
147
+ "branch": "10",
148
+ "eol": "2021-04-30"
149
+ },
150
+ {
151
+ "branch": "9",
152
+ "eol": "2018-06-30"
153
+ },
154
+ {
155
+ "branch": "8",
156
+ "eol": "2019-12-31"
157
+ },
158
+ {
159
+ "branch": "6",
160
+ "eol": "2019-04-30"
161
+ },
162
+ {
163
+ "branch": "4",
164
+ "eol": "2018-04-30"
165
+ }
166
+ ],
167
+ "source": "https://nodejs.org/en/about/previous-releases",
168
+ "date": "2026-10-21",
169
+ "confidence": "confirmed",
170
+ "description": "From the Node.js release schedule (https://github.com/nodejs/Release/blob/main/schedule.json): 22, 24 and 26 are supported; 25 ended 2026-06-01 and 20 ended 2026-04-30. Checked 2026-10-21.",
171
+ "references": [
172
+ "nodejsreleases",
173
+ "endoflifedate"
174
+ ]
175
+ },
176
+ {
177
+ "id": "python-eol",
178
+ "product": "python",
179
+ "branches": [
180
+ {
181
+ "branch": "3.10",
182
+ "eol": "2026-10-01"
183
+ },
184
+ {
185
+ "branch": "3.9",
186
+ "eol": "2025-10-31"
187
+ },
188
+ {
189
+ "branch": "3.8",
190
+ "eol": "2024-10-07"
191
+ },
192
+ {
193
+ "branch": "3.7",
194
+ "eol": "2023-06-27"
195
+ },
196
+ {
197
+ "branch": "3.6",
198
+ "eol": "2021-12-23"
199
+ },
200
+ {
201
+ "branch": "3.5",
202
+ "eol": "2020-09-30"
203
+ },
204
+ {
205
+ "branch": "3.4",
206
+ "eol": "2019-03-18"
207
+ },
208
+ {
209
+ "branch": "3.3",
210
+ "eol": "2017-09-29"
211
+ },
212
+ {
213
+ "branch": "2.7",
214
+ "eol": "2020-01-01"
215
+ }
216
+ ],
217
+ "source": "https://devguide.python.org/versions/",
218
+ "date": "2026-10-21",
219
+ "confidence": "confirmed",
220
+ "description": "From the Python Developer's Guide status of Python versions: 3.11 to 3.15 are supported; 3.10 reached end of life on 2026-10-01. Only ended lines are listed, since future ends are given to the month. Checked 2026-10-21.",
221
+ "references": [
222
+ "pythondevguideversions",
223
+ "endoflifedate"
224
+ ]
225
+ },
226
+ {
227
+ "id": "nginx-eol",
228
+ "product": "nginx",
229
+ "branches": [
230
+ {
231
+ "branch": "1.29",
232
+ "eol": "2026-05-13"
233
+ },
234
+ {
235
+ "branch": "1.28",
236
+ "eol": "2026-04-14"
237
+ },
238
+ {
239
+ "branch": "1.27",
240
+ "eol": "2025-06-24"
241
+ },
242
+ {
243
+ "branch": "1.26",
244
+ "eol": "2025-04-23"
245
+ },
246
+ {
247
+ "branch": "1.25",
248
+ "eol": "2024-05-29"
249
+ },
250
+ {
251
+ "branch": "1.24",
252
+ "eol": "2024-04-23"
253
+ },
254
+ {
255
+ "branch": "1.23",
256
+ "eol": "2023-05-23"
257
+ },
258
+ {
259
+ "branch": "1.22",
260
+ "eol": "2023-04-11"
261
+ },
262
+ {
263
+ "branch": "1.21",
264
+ "eol": "2022-06-21"
265
+ },
266
+ {
267
+ "branch": "1.20",
268
+ "eol": "2022-05-24"
269
+ },
270
+ {
271
+ "branch": "1.19",
272
+ "eol": "2021-05-25"
273
+ },
274
+ {
275
+ "branch": "1.18",
276
+ "eol": "2021-04-20"
277
+ },
278
+ {
279
+ "branch": "1.17",
280
+ "eol": "2020-05-26"
281
+ },
282
+ {
283
+ "branch": "1.16",
284
+ "eol": "2020-04-20"
285
+ },
286
+ {
287
+ "branch": "1.15",
288
+ "eol": "2019-05-21"
289
+ },
290
+ {
291
+ "branch": "1.14",
292
+ "eol": "2019-04-23"
293
+ },
294
+ {
295
+ "branch": "1.13",
296
+ "eol": "2018-06-05"
297
+ },
298
+ {
299
+ "branch": "1.12",
300
+ "eol": "2018-04-17"
301
+ },
302
+ {
303
+ "branch": "1.11",
304
+ "eol": "2017-04-25"
305
+ },
306
+ {
307
+ "branch": "1.10",
308
+ "eol": "2017-04-12"
309
+ }
310
+ ],
311
+ "source": "https://nginx.org/en/download.html",
312
+ "date": "2026-10-21",
313
+ "confidence": "likely",
314
+ "description": "nginx supports only the current mainline (1.31) and stable (1.30) lines and lists older ones as legacy versions with no fixes. The dates each line stopped being supported are from endoflife.date (https://endoflife.date/nginx), a secondary source, hence confidence likely. Checked 2026-10-21.",
315
+ "references": [
316
+ "nginxadvisories",
317
+ "endoflifedate"
318
+ ]
319
+ },
320
+ {
321
+ "id": "apache-httpd-eol",
322
+ "product": "apache-httpd",
323
+ "branches": [
324
+ {
325
+ "branch": "2.2",
326
+ "eol": "2017-07-11"
327
+ },
328
+ {
329
+ "branch": "2.0",
330
+ "eol": "2013-07-10"
331
+ }
332
+ ],
333
+ "source": "https://httpd.apache.org/",
334
+ "date": "2026-10-21",
335
+ "confidence": "confirmed",
336
+ "description": "httpd.apache.org: Apache httpd 2.2 is end of life, the final release was 2.2.34 (July 2017), with no further security updates; only 2.4 is supported. Dates of the final 2.2 and 2.0 releases from endoflife.date. Checked 2026-10-21.",
337
+ "references": [
338
+ "httpdvulns24",
339
+ "endoflifedate"
340
+ ]
341
+ },
342
+ {
343
+ "id": "openssl-eol",
344
+ "product": "openssl",
345
+ "branches": [
346
+ {
347
+ "branch": "0.9.8",
348
+ "eol": "2015-12-31"
349
+ },
350
+ {
351
+ "branch": "1.0.0",
352
+ "eol": "2015-12-31"
353
+ },
354
+ {
355
+ "branch": "1.0.1",
356
+ "eol": "2016-12-31"
357
+ },
358
+ {
359
+ "branch": "1.0.2",
360
+ "eol": "2019-12-31"
361
+ },
362
+ {
363
+ "branch": "1.1.0",
364
+ "eol": "2019-09-11"
365
+ },
366
+ {
367
+ "branch": "1.1.1",
368
+ "eol": "2023-09-11"
369
+ },
370
+ {
371
+ "branch": "3.0",
372
+ "eol": "2026-09-07"
373
+ },
374
+ {
375
+ "branch": "3.1",
376
+ "eol": "2025-03-14"
377
+ },
378
+ {
379
+ "branch": "3.2",
380
+ "eol": "2025-11-23"
381
+ },
382
+ {
383
+ "branch": "3.3",
384
+ "eol": "2026-04-09"
385
+ },
386
+ {
387
+ "branch": "3.4",
388
+ "eol": "2026-10-22"
389
+ },
390
+ {
391
+ "branch": "3.5",
392
+ "eol": "2030-04-08"
393
+ },
394
+ {
395
+ "branch": "3.6",
396
+ "eol": "2026-11-01"
397
+ },
398
+ {
399
+ "branch": "4.0",
400
+ "eol": "2027-05-14"
401
+ }
402
+ ],
403
+ "source": "https://endoflife.date/openssl",
404
+ "date": "2026-10-21",
405
+ "confidence": "confirmed",
406
+ "description": "Dates from endoflife.date, checked on 2026-10-21 against the OpenSSL release strategy (https://openssl-library.org/policies/releasestrat/), which lists 3.4, 3.5, 3.6 and 4.0 as supported and 3.0, 1.1.1, 1.0.2 and older as no longer supported (paid extended support exists for 3.0, 1.1.1 and 1.0.2).",
407
+ "references": [
408
+ "opensslvulns",
409
+ "endoflifedate"
410
+ ]
411
+ }
412
+ ]
413
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "schema": 1,
3
+ "name": "advisories",
4
+ "version": "1.0.0",
5
+ "created_at": "2026-10-21T15:22:16Z",
6
+ "min_penthera": "1.8.0",
7
+ "description": "Runtime and server security advisories (PHP, Apache HTTP Server, nginx, Node.js, Python, OpenSSL) and end-of-life release lines, from vendor advisories and support pages. Every rule cites its vendor source.",
8
+ "rules": [
9
+ {
10
+ "file": "advisories.json",
11
+ "kind": "runtime-advisory",
12
+ "sha256": "8e222761046dedf17c4acf2f4bf87e1961f4b73fe6098d5501bd4547b3d80fd9"
13
+ },
14
+ {
15
+ "file": "eol.json",
16
+ "kind": "runtime-eol",
17
+ "sha256": "e98c360db5a69dd83a2e4673bd254f558fc2c0558a5a49087c538f070728ea9e"
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,6 @@
1
+ -----BEGIN SSH SIGNATURE-----
2
+ U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgDgRSZTRaMM36gE32AzSZRuHiqG
3
+ VstB30pUKdNOYLIywAAAAOcGVudGhlcmEtcnVsZXMAAAAAAAAABnNoYTUxMgAAAFMAAAAL
4
+ c3NoLWVkMjU1MTkAAABASImtVokMrMVc+ObkfJUW0Bx0tul35dLGjb1Gmnsa316Lrv6xRU
5
+ 4XyuUjXIxS1xAiVcybAKbu67VH/35XTwmvDg==
6
+ -----END SSH SIGNATURE-----
@@ -0,0 +1,13 @@
1
+ # Keys trusted to sign Penthera rule packs (ssh-keygen -Y, namespace
2
+ # "penthera-rules"). Format: ALLOWED SIGNERS in ssh-keygen(1):
3
+ #
4
+ # principal namespaces="penthera-rules" ssh-ed25519 AAAA... comment
5
+ #
6
+ # Only the maintainer's release-signing key belongs here. Adding a key to this
7
+ # file in a PR is a change to Penthera's trust root and gets the same review
8
+ # as a change to the verifier. Users who trust their own packs pass
9
+ # --rules-signers <file> instead of editing this file.
10
+ #
11
+ # The maintainer's release-signing key (a dedicated key, used only for rule
12
+ # packs). See docs/rule-packs.md, "Signing a release".
13
+ daan@gaia.computer namespaces="penthera-rules" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIA4EUmU0WjDN+oBN9gM0mUbh4qhlbLQd9KVCnTTmCyMs penthera rule signing
@@ -0,0 +1,29 @@
1
+ {
2
+ "kind": "agent-exec",
3
+ "rules": [
4
+ {
5
+ "id": "shell-process-substitution",
6
+ "label": "shell runs a download via process substitution",
7
+ "pattern": "\\b(?:(?:ba|z)?sh|source|\\.)\\s+<\\(\\s*(?:curl|wget)\\b",
8
+ "flags": "i",
9
+ "source": "https://github.com/danoszz/penthera/blob/afafb24/lib/agents/hidden-content.js",
10
+ "date": "2026-10-19",
11
+ "confidence": "likely",
12
+ "references": [
13
+ "greshake2023signed"
14
+ ]
15
+ },
16
+ {
17
+ "id": "shell-command-substitution",
18
+ "label": "shell -c runs a download",
19
+ "pattern": "\\b(?:ba|z)?sh\\s+-c\\s+[\"']?\\$\\(\\s*(?:curl|wget)\\b",
20
+ "flags": "i",
21
+ "source": "https://github.com/danoszz/penthera/blob/afafb24/lib/agents/hidden-content.js",
22
+ "date": "2026-10-19",
23
+ "confidence": "likely",
24
+ "references": [
25
+ "greshake2023signed"
26
+ ]
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "kind": "agent-instruction",
3
+ "rules": [
4
+ {
5
+ "id": "instruction.credential-paths",
6
+ "description": "Mentions of SSH keys, cloud credentials and package-manager tokens inside hidden text.",
7
+ "pattern": "(?:~\\/\\.ssh|\\bid_rsa\\b|\\bid_ed25519\\b|\\.aws\\/credentials|\\.npmrc|\\.netrc|\\bkeychain\\b)",
8
+ "flags": "i",
9
+ "source": "https://github.com/danoszz/penthera/blob/afafb24/lib/agents/hidden-content.js",
10
+ "date": "2026-10-19",
11
+ "confidence": "potential",
12
+ "references": [
13
+ "greshake2023signed"
14
+ ]
15
+ }
16
+ ]
17
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "schema": 1,
3
+ "name": "core",
4
+ "version": "1.0.0",
5
+ "created_at": "2026-10-19T13:44:05Z",
6
+ "min_penthera": "1.2.0",
7
+ "description": "Built-in detections that ship with Penthera: AI provider key formats, hidden-instruction and remote-exec patterns for agent configs, and the exposed .env template.",
8
+ "rules": [
9
+ {
10
+ "file": "agent-exec.json",
11
+ "kind": "agent-exec",
12
+ "sha256": "9decfc8f8305b302826e6b23c5f71520534beebe58e08d3da2731772a15eb416"
13
+ },
14
+ {
15
+ "file": "agent-instructions.json",
16
+ "kind": "agent-instruction",
17
+ "sha256": "edf192a2cf5665596b97ba2702d2540d37db3c9a7a953171a58f42ac16ed3b97"
18
+ },
19
+ {
20
+ "file": "secrets.json",
21
+ "kind": "secret",
22
+ "sha256": "48f2601311ea16d1254b21920582e3bf18c2c612a0e45406a8bdd2571358c320"
23
+ },
24
+ {
25
+ "file": "templates.json",
26
+ "kind": "nuclei-template",
27
+ "sha256": "67d762547efa3ac68b632fa2ca9196d97b601b7a35ec4e12eaf41207eb1e906d"
28
+ }
29
+ ]
30
+ }
@@ -0,0 +1,6 @@
1
+ -----BEGIN SSH SIGNATURE-----
2
+ U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgDgRSZTRaMM36gE32AzSZRuHiqG
3
+ VstB30pUKdNOYLIywAAAAOcGVudGhlcmEtcnVsZXMAAAAAAAAABnNoYTUxMgAAAFMAAAAL
4
+ c3NoLWVkMjU1MTkAAABAnpz2oJEtsQ+W+YKd+pycUp0c3N036Y2ISItLrAWcK74RgRu3uM
5
+ mY6yTTPXNF0ilM1jbMknukk0tsXA2cfQQ6AA==
6
+ -----END SSH SIGNATURE-----