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.
- package/CHANGELOG.md +315 -0
- package/README.md +139 -76
- package/SECURITY.md +8 -6
- package/docs/examples/pr-dependency-review.yml +1 -1
- package/lib/adaptive-probes.js +3 -3
- package/lib/advisories/evidence.js +248 -0
- package/lib/advisories/index.js +228 -0
- package/lib/advisories/products.js +83 -0
- package/lib/advisories/versions.js +65 -0
- package/lib/agents/hidden-content.js +122 -11
- package/lib/agents/index.js +26 -6
- package/lib/agents/lock.js +33 -5
- package/lib/agents/rules.js +33 -4
- package/lib/compliance/index.js +4 -4
- package/lib/crawler.js +12 -15
- package/lib/deps/capabilities.js +21 -5
- package/lib/deps/findings.js +309 -0
- package/lib/deps/index.js +13 -272
- package/lib/deps/iocs.js +74 -0
- package/lib/deps/lockfile.js +3 -8
- package/lib/deps/online.js +8 -3
- package/lib/deps/popular-packages.json.gz +0 -0
- package/lib/deps/popular-pypi.json.gz +0 -0
- package/lib/deps/python/capabilities.js +16 -3
- package/lib/deps/python/index.js +5 -1
- package/lib/deps/python/lockfiles.js +11 -5
- package/lib/deps/python/source.js +75 -26
- package/lib/deps/python/toml.js +15 -3
- package/lib/deps/source.js +28 -9
- package/lib/deps/typosquat.js +30 -5
- package/lib/fix/apply.js +253 -34
- package/lib/fix/index.js +7 -4
- package/lib/fix/model.js +25 -5
- package/lib/fix/util.js +6 -2
- package/lib/fuzzer.js +3 -3
- package/lib/git.js +65 -0
- package/lib/hook/index.js +157 -73
- package/lib/hook/policy.js +10 -4
- package/lib/install/index.js +4 -7
- package/lib/machine.js +0 -13
- package/lib/memory/store.js +11 -4
- package/lib/nuclei-loader.js +0 -25
- package/lib/owasp-wstg.js +4 -0
- package/lib/plugins.js +1 -1
- package/lib/provenance.js +1 -0
- package/lib/recon.js +12 -31
- package/lib/references.json +224 -0
- package/lib/retirejs.js +4 -4
- package/lib/rules/advisories/advisories.json +186 -0
- package/lib/rules/advisories/eol.json +413 -0
- package/lib/rules/advisories/pack.json +20 -0
- package/lib/rules/advisories/pack.json.sig +6 -0
- package/lib/rules/allowed_signers +13 -0
- package/lib/rules/core/agent-exec.json +29 -0
- package/lib/rules/core/agent-instructions.json +17 -0
- package/lib/rules/core/pack.json +30 -0
- package/lib/rules/core/pack.json.sig +6 -0
- package/lib/rules/core/secrets.json +161 -0
- package/lib/rules/core/templates.json +52 -0
- package/lib/rules/index.js +107 -0
- package/lib/rules/ioc-2025-2026/files.json +43 -0
- package/lib/rules/ioc-2025-2026/hosts.json +35 -0
- package/lib/rules/ioc-2025-2026/pack.json +25 -0
- package/lib/rules/ioc-2025-2026/pack.json.sig +6 -0
- package/lib/rules/ioc-2025-2026/packages.json +1048 -0
- package/lib/rules/pack.js +452 -0
- package/lib/rules/regex-guard.js +81 -9
- package/lib/rules/sshsig.js +205 -0
- package/lib/templates.js +24 -20
- package/lib/tmp.js +21 -0
- package/lib/whitebox/frameworks.js +1 -1
- package/lib/whitebox/secrets.js +117 -41
- package/package.json +12 -4
- package/scripts/rules/build-pack.mjs +80 -0
- package/scripts/rules/check-bundled.mjs +30 -0
- package/scripts/rules/sign-pack.sh +32 -0
- package/skills/penthera/SKILL.md +16 -15
- package/src/agent/git.js +147 -14
- package/src/agent/loop.js +165 -46
- package/src/cli/agent.js +11 -5
- package/src/cli/deps.js +0 -2
- package/src/cli/detect.js +14 -7
- package/src/cli/fix.js +26 -8
- package/src/cli/hook.js +2 -1
- package/src/cli/onboarding.js +14 -6
- package/src/cli/report-outputs.js +1 -0
- package/src/cli/rules.js +144 -0
- package/src/cli/ui.js +43 -10
- package/src/cli.js +24 -1
- package/src/report/evidence.js +105 -21
- package/src/report/footer.js +1 -1
- package/src/report/md-escape.js +8 -0
- package/src/scan-repo.js +6 -0
- package/src/scan-url.js +11 -3
- package/src/ui/api/data.js +39 -6
- package/src/ui/api/routes.js +44 -11
- package/src/ui/api/runs.js +32 -7
- package/src/ui/security.js +20 -23
- package/src/ui/server.js +52 -27
- package/src/ui/static/app.css +583 -213
- package/src/ui/static/favicon.svg +1 -1
- package/src/ui/static/fonts/DepartureMono-LICENSE.txt +93 -0
- package/src/ui/static/fonts/DepartureMono-Regular.woff2 +0 -0
- package/src/ui/static/index.html +5 -4
- package/src/ui/static/js/api.js +114 -6
- package/src/ui/static/js/app.js +81 -42
- package/src/ui/static/js/center.js +246 -133
- package/src/ui/static/js/charts.js +99 -18
- package/src/ui/static/js/copy.js +68 -9
- package/src/ui/static/js/dialog.js +152 -0
- package/src/ui/static/js/left.js +23 -60
- package/src/ui/static/js/menubar.js +170 -0
- package/src/ui/static/js/onboarding.js +104 -0
- package/src/ui/static/js/panels.js +186 -0
- package/src/ui/static/js/right.js +69 -188
- package/src/ui/static/js/state.js +36 -5
- package/src/ui/static/logo.svg +10 -0
- package/src/ui/static/mark.svg +3 -0
- package/src/utils/http.js +162 -13
- package/docs/METHODOLOGY.md +0 -375
- package/docs/commands/README.md +0 -24
- package/docs/commands/action.md +0 -21
- package/docs/commands/agents.md +0 -38
- package/docs/commands/deps.md +0 -115
- package/docs/commands/fix.md +0 -53
- package/docs/commands/hook.md +0 -69
- package/docs/commands/init.md +0 -114
- package/docs/commands/install.md +0 -53
- package/docs/commands/scan.md +0 -100
- package/docs/commands/skill.md +0 -58
- package/docs/compare/README.md +0 -25
- package/docs/compare/github.md +0 -60
- package/docs/compare/semgrep.md +0 -54
- package/docs/compare/snyk.md +0 -62
- package/docs/compare/socket.md +0 -78
- package/docs/compare/zap.md +0 -59
- package/docs/compliance-cra.md +0 -141
- package/docs/compliance-nis2.md +0 -168
- package/docs/dashboard.md +0 -187
- package/docs/evidence.md +0 -162
- package/docs/funding/due-diligence-checklist.md +0 -79
- package/docs/funding/nlnet-ngi-zero-draft.md +0 -273
- package/docs/funding/partner-one-pager.md +0 -84
- package/docs/funding/sponsor-tiers.md +0 -81
- package/docs/index.md +0 -81
- package/docs/internal-audit.md +0 -83
- package/docs/local-loop.md +0 -276
- package/docs/marketing.md +0 -151
- package/docs/owasp-wstg-coverage.md +0 -79
- package/docs/plan.md +0 -102
- package/docs/privacy.md +0 -38
- package/docs/references.bib +0 -559
- package/docs/references.md +0 -119
- package/docs/release-plan.md +0 -228
- package/docs/research/socket-positioning-notes.md +0 -183
- package/docs/use-cases/README.md +0 -14
- package/docs/use-cases/agencies.md +0 -71
- package/docs/use-cases/ai-coding-teams.md +0 -81
- package/docs/use-cases/eu-sme-compliance.md +0 -68
- package/docs/use-cases/open-source-maintainers.md +0 -75
- package/docs/use-cases/solo-founder.md +0 -65
- package/lib/deps/popular-packages.json +0 -1
- package/lib/deps/popular-pypi.json +0 -1
package/docs/references.md
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
# References
|
|
2
|
-
|
|
3
|
-
The research and standards that Penthera's [methodology](METHODOLOGY.md) and per-finding sources cite, in APA 7th edition style, grouped by topic and sorted alphabetically by first author within each group. The BibTeX source is [references.bib](references.bib); this page is generated from it by `node scripts/build-references.mjs`, and a test fails if the two drift or if a citation in METHODOLOGY.md does not resolve to an entry here.
|
|
4
|
-
|
|
5
|
-
Every entry was checked against the publisher or standards body (Crossref DOI metadata, USENIX, NDSS, arXiv, the RFC Editor, OWASP, MITRE, OASIS, the EU Publications Office) on 2026-10-19. Entries that could not be verified were left out, and so were fields (pages, volume, issue, editors) that the publisher's metadata does not record. Each entry has an anchor named after its BibTeX key, for example [`#bau2010state`](#bau2010state), which is also the key reports and SARIF use.
|
|
6
|
-
|
|
7
|
-
## Black-box scanning and benchmarking
|
|
8
|
-
|
|
9
|
-
<a id="antunes2010benchmarking"></a>Antunes, N., & Vieira, M. (2010). Benchmarking vulnerability detection tools for web services. In *2010 IEEE International Conference on Web Services (ICWS)* (pp. 203–210). IEEE. <https://doi.org/10.1109/ICWS.2010.76>
|
|
10
|
-
|
|
11
|
-
<a id="antunes2015assessing"></a>Antunes, N., & Vieira, M. (2015). Assessing and comparing vulnerability detection tools for web services: Benchmarking approach and examples. *IEEE Transactions on Services Computing*, *8*(2), 269–283. <https://doi.org/10.1109/TSC.2014.2310221>
|
|
12
|
-
|
|
13
|
-
<a id="bau2010state"></a>Bau, J., Bursztein, E., Gupta, D., & Mitchell, J. (2010). State of the art: Automated black-box web application vulnerability testing. In *2010 IEEE Symposium on Security and Privacy* (pp. 332–345). IEEE. <https://doi.org/10.1109/SP.2010.27>
|
|
14
|
-
|
|
15
|
-
<a id="doupe2010johnny"></a>Doupé, A., Cova, M., & Vigna, G. (2010). Why Johnny can't pentest: An analysis of black-box web vulnerability scanners. In C. Kreibich & M. Jahnke (Eds.), *Detection of Intrusions and Malware, and Vulnerability Assessment (DIMVA 2010)* (pp. 111–131). Springer. <https://doi.org/10.1007/978-3-642-14215-4_7>
|
|
16
|
-
|
|
17
|
-
<a id="owaspbenchmark"></a>OWASP Foundation. (n.d.-a). *OWASP Benchmark project* (Version 1.2). Retrieved October 19, 2026, from <https://owasp.org/www-project-benchmark/>
|
|
18
|
-
|
|
19
|
-
## Security design principles
|
|
20
|
-
|
|
21
|
-
<a id="saltzer1975protection"></a>Saltzer, J. H., & Schroeder, M. D. (1975). The protection of information in computer systems. *Proceedings of the IEEE*, *63*(9), 1278–1308. <https://doi.org/10.1109/PROC.1975.9939>
|
|
22
|
-
|
|
23
|
-
## Threat modeling
|
|
24
|
-
|
|
25
|
-
<a id="kohnfelder1999threats"></a>Kohnfelder, L., & Garg, P. (1999). *The threats to our products* [Internal publication]. Microsoft. Retrieved October 19, 2026, from <https://shostack.org/files/microsoft/The-Threats-To-Our-Products.docx>
|
|
26
|
-
|
|
27
|
-
<a id="shostack2014threat"></a>Shostack, A. (2014). *Threat modeling: Designing for security*. Wiley. <https://www.wiley-vch.de/de/fachgebiete/computer-und-informatik/threat-modeling-978-1-118-80999-0>
|
|
28
|
-
|
|
29
|
-
## Software supply chain
|
|
30
|
-
|
|
31
|
-
<a id="ladisa2023sok"></a>Ladisa, P., Plate, H., Martinez, M., & Barais, O. (2023). SoK: Taxonomy of attacks on open-source software supply chains. In *2023 IEEE Symposium on Security and Privacy (SP)* (pp. 1509–1526). IEEE. <https://doi.org/10.1109/SP46215.2023.10179304>
|
|
32
|
-
|
|
33
|
-
<a id="lauinger2017thou"></a>Lauinger, T., Chaabane, A., Arshad, S., Robertson, W., Wilson, C., & Kirda, E. (2017). Thou shalt not depend on me: Analysing the use of outdated JavaScript libraries on the web. In *Proceedings 2017 Network and Distributed System Security Symposium*. Internet Society. <https://doi.org/10.14722/ndss.2017.23414>
|
|
34
|
-
|
|
35
|
-
<a id="ohm2020backstabber"></a>Ohm, M., Plate, H., Sykosch, A., & Meier, M. (2020). Backstabber's knife collection: A review of open source software supply chain attacks. In C. Maurice, L. Bilge, G. Stringhini, & N. Neves (Eds.), *Detection of Intrusions and Malware, and Vulnerability Assessment (DIMVA 2020)* (pp. 23–43). Springer. <https://doi.org/10.1007/978-3-030-52683-2_2>
|
|
36
|
-
|
|
37
|
-
<a id="samuel2010survivable"></a>Samuel, J., Mathewson, N., Cappos, J., & Dingledine, R. (2010). Survivable key compromise in software update systems. In *Proceedings of the 17th ACM Conference on Computer and Communications Security (CCS '10)* (pp. 61–72). ACM. <https://doi.org/10.1145/1866307.1866315>
|
|
38
|
-
|
|
39
|
-
<a id="thompson1984reflections"></a>Thompson, K. (1984). Reflections on trusting trust. *Communications of the ACM*, *27*(8), 761–763. <https://doi.org/10.1145/358198.358210>
|
|
40
|
-
|
|
41
|
-
<a id="torresarias2019intoto"></a>Torres-Arias, S., Afzali, H., Kuppusamy, T. K., Curtmola, R., & Cappos, J. (2019). in-toto: Providing farm-to-table guarantees for bits and bytes. In *28th USENIX Security Symposium (USENIX Security 19)* (pp. 1393–1410). USENIX Association. <https://www.usenix.org/conference/usenixsecurity19/presentation/torres-arias>
|
|
42
|
-
|
|
43
|
-
<a id="zimmermann2019small"></a>Zimmermann, M., Staicu, C.-A., Tenny, C., & Pradel, M. (2019). Small world with high risks: A study of security threats in the npm ecosystem. In *28th USENIX Security Symposium (USENIX Security 19)* (pp. 995–1010). USENIX Association. <https://www.usenix.org/conference/usenixsecurity19/presentation/zimmerman>
|
|
44
|
-
|
|
45
|
-
## Secret leakage
|
|
46
|
-
|
|
47
|
-
<a id="basak2023secretbench"></a>Basak, S. K., Neil, L., Reaves, B., & Williams, L. (2023). SecretBench: A dataset of software secrets. In *2023 IEEE/ACM 20th International Conference on Mining Software Repositories (MSR)* (pp. 347–351). IEEE. <https://doi.org/10.1109/MSR59073.2023.00053>
|
|
48
|
-
|
|
49
|
-
<a id="meli2019bad"></a>Meli, M., McNiece, M. R., & Reaves, B. (2019). How bad can it Git? Characterizing secret leakage in public GitHub repositories. In *Proceedings 2019 Network and Distributed System Security Symposium*. Internet Society. <https://doi.org/10.14722/ndss.2019.23418>
|
|
50
|
-
|
|
51
|
-
## Web application security
|
|
52
|
-
|
|
53
|
-
<a id="barth2008robust"></a>Barth, A., Jackson, C., & Mitchell, J. C. (2008). Robust defenses for cross-site request forgery. In *Proceedings of the 15th ACM Conference on Computer and Communications Security (CCS '08)* (pp. 75–88). ACM. <https://doi.org/10.1145/1455770.1455782>
|
|
54
|
-
|
|
55
|
-
<a id="chen2018cors"></a>Chen, J., Jiang, J., Duan, H., Wan, T., Chen, S., Paxson, V., & Yang, M. (2018). We still don't have secure cross-domain requests: An empirical study of CORS. In *27th USENIX Security Symposium (USENIX Security 18)* (pp. 1079–1093). USENIX Association. <https://www.usenix.org/conference/usenixsecurity18/presentation/chen-jianjun>
|
|
56
|
-
|
|
57
|
-
<a id="crosby2009opportunities"></a>Crosby, S. A., Wallach, D. S., & Riedi, R. H. (2009). Opportunities and limits of remote timing attacks. *ACM Transactions on Information and System Security*, *12*(3), 1–29. <https://doi.org/10.1145/1455526.1455530>
|
|
58
|
-
|
|
59
|
-
<a id="fett2016comprehensive"></a>Fett, D., Küsters, R., & Schmitz, G. (2016). A comprehensive formal security analysis of OAuth 2.0. In *Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security (CCS '16)* (pp. 1204–1215). ACM. <https://doi.org/10.1145/2976749.2978385>
|
|
60
|
-
|
|
61
|
-
<a id="hodges2012rfc6797"></a>Hodges, J., Jackson, C., & Barth, A. (2012). *HTTP strict transport security (HSTS)* (RFC 6797). RFC Editor. <https://doi.org/10.17487/RFC6797>
|
|
62
|
-
|
|
63
|
-
<a id="jones2015rfc7519"></a>Jones, M., Bradley, J., & Sakimura, N. (2015). *JSON web token (JWT)* (RFC 7519). RFC Editor. <https://doi.org/10.17487/RFC7519>
|
|
64
|
-
|
|
65
|
-
<a id="kitterman2014rfc7208"></a>Kitterman, S. (2014). *Sender policy framework (SPF) for authorizing use of domains in email, version 1* (RFC 7208). RFC Editor. <https://doi.org/10.17487/RFC7208>
|
|
66
|
-
|
|
67
|
-
<a id="kocher1996timing"></a>Kocher, P. C. (1996). Timing attacks on implementations of Diffie-Hellman, RSA, DSS, and other systems. In N. Koblitz (Ed.), *Advances in Cryptology – CRYPTO '96* (pp. 104–113). Springer. <https://doi.org/10.1007/3-540-68697-5_9>
|
|
68
|
-
|
|
69
|
-
<a id="kucherawy2015rfc7489"></a>Kucherawy, M., & Zwicky, E. (2015). *Domain-based message authentication, reporting, and conformance (DMARC)* (RFC 7489). RFC Editor. <https://doi.org/10.17487/RFC7489>
|
|
70
|
-
|
|
71
|
-
<a id="lekies2013flows"></a>Lekies, S., Stock, B., & Johns, M. (2013). 25 million flows later: Large-scale detection of DOM-based XSS. In *Proceedings of the 2013 ACM SIGSAC Conference on Computer and Communications Security (CCS '13)* (pp. 1193–1204). ACM. <https://doi.org/10.1145/2508859.2516703>
|
|
72
|
-
|
|
73
|
-
<a id="lodderstedt2025rfc9700"></a>Lodderstedt, T., Bradley, J., Labunets, A., & Fett, D. (2025). *Best current practice for OAuth 2.0 security* (RFC 9700, BCP 240). RFC Editor. <https://doi.org/10.17487/RFC9700>
|
|
74
|
-
|
|
75
|
-
<a id="owaspwstg42"></a>OWASP Foundation. (n.d.-b). *OWASP Web Security Testing Guide, version 4.2*. Retrieved October 19, 2026, from <https://wstg.owasp.org/v4.2/>
|
|
76
|
-
|
|
77
|
-
<a id="owasp2021top10"></a>OWASP Foundation. (2021). *OWASP Top 10:2021*. Retrieved October 19, 2026, from <https://top10.owasp.org/2021>
|
|
78
|
-
|
|
79
|
-
<a id="owasp2023api"></a>OWASP Foundation. (2023). *OWASP Top 10 API security risks – 2023*. OWASP API Security Project. Retrieved October 19, 2026, from <https://owasp.org/API-Security/editions/2023/en/0x11-t10/>
|
|
80
|
-
|
|
81
|
-
<a id="owasp2025top10"></a>OWASP Foundation. (2025c). *OWASP Top 10:2025*. Retrieved October 19, 2026, from <https://top10.owasp.org/2025>
|
|
82
|
-
|
|
83
|
-
<a id="sakimura2015rfc7636"></a>Sakimura, N., Bradley, J., & Agarwal, N. (2015). *Proof key for code exchange by OAuth public clients* (RFC 7636). RFC Editor. <https://doi.org/10.17487/RFC7636>
|
|
84
|
-
|
|
85
|
-
<a id="sheffer2020rfc8725"></a>Sheffer, Y., Hardt, D., & Jones, M. (2020). *JSON web token best current practices* (RFC 8725, BCP 225). RFC Editor. <https://doi.org/10.17487/RFC8725>
|
|
86
|
-
|
|
87
|
-
<a id="stock2014precise"></a>Stock, B., Lekies, S., Mueller, T., Spiegel, P., & Johns, M. (2014). Precise client-side protection against DOM-based cross-site scripting. In *23rd USENIX Security Symposium (USENIX Security 14)* (pp. 655–670). USENIX Association. <https://www.usenix.org/conference/usenixsecurity14/technical-sessions/presentation/stock>
|
|
88
|
-
|
|
89
|
-
<a id="weichselbaum2016csp"></a>Weichselbaum, L., Spagnuolo, M., Lekies, S., & Janc, A. (2016). CSP is dead, long live CSP! On the insecurity of whitelists and the future of Content Security Policy. In *Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security (CCS '16)* (pp. 1376–1387). ACM. <https://doi.org/10.1145/2976749.2978363>
|
|
90
|
-
|
|
91
|
-
## LLM and agent security
|
|
92
|
-
|
|
93
|
-
<a id="greshake2023signed"></a>Greshake, K., Abdelnabi, S., Mishra, S., Endres, C., Holz, T., & Fritz, M. (2023). Not what you've signed up for: Compromising real-world LLM-integrated applications with indirect prompt injection. In *Proceedings of the 16th ACM Workshop on Artificial Intelligence and Security (AISec '23)* (pp. 79–90). ACM. <https://doi.org/10.1145/3605764.3623985>
|
|
94
|
-
|
|
95
|
-
<a id="liu2023prompt"></a>Liu, Y., Deng, G., Li, Y., Wang, K., Wang, Z., Wang, X., Zhang, T., Liu, Y., Wang, H., Zheng, Y., Zhang, L. Y., & Liu, Y. (2023). *Prompt injection attack against LLM-integrated applications* [Preprint]. arXiv. <https://doi.org/10.48550/arXiv.2306.05499>
|
|
96
|
-
|
|
97
|
-
<a id="mitreatlas"></a>The MITRE Corporation. (n.d.-b). *MITRE ATLAS: Adversarial Threat Landscape for AI Systems*. Retrieved October 19, 2026, from <https://atlas.mitre.org/>
|
|
98
|
-
|
|
99
|
-
<a id="owasp2024llmtop10"></a>OWASP Foundation. (2024, November 17). *OWASP Top 10 for LLM applications 2025*. OWASP Gen AI Security Project. Retrieved October 19, 2026, from <https://genai.owasp.org/resource/owasp-top-10-for-llm-applications-2025/>
|
|
100
|
-
|
|
101
|
-
<a id="owasp2025mcptop10"></a>OWASP Foundation. (2025a). *OWASP MCP Top 10* [Beta]. Retrieved October 19, 2026, from <https://owasp.org/www-project-mcp-top-10/>
|
|
102
|
-
|
|
103
|
-
<a id="owasp2025agentic"></a>OWASP Foundation. (2025b, December 9). *OWASP Top 10 for agentic applications for 2026*. OWASP Gen AI Security Project. Retrieved October 19, 2026, from <https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026/>
|
|
104
|
-
|
|
105
|
-
<a id="perez2022ignore"></a>Perez, F., & Ribeiro, I. (2022). *Ignore previous prompt: Attack techniques for language models* [Preprint]. arXiv. <https://doi.org/10.48550/arXiv.2211.09527>
|
|
106
|
-
|
|
107
|
-
<a id="spracklen2025package"></a>Spracklen, J., Wijewickrama, R., Sakib, A. H. M. N., Maiti, A., Viswanath, B., & Jadliwala, M. (2025). We have a package for you! A comprehensive analysis of package hallucinations by code generating LLMs. In *34th USENIX Security Symposium (USENIX Security 25)* (pp. 3687–3706). USENIX Association. <https://www.usenix.org/conference/usenixsecurity25/presentation/spracklen>
|
|
108
|
-
|
|
109
|
-
## Standards and regulation
|
|
110
|
-
|
|
111
|
-
<a id="eu2022nis2"></a>European Parliament and Council of the European Union. (2022). *Directive (EU) 2022/2555 of the European Parliament and of the Council of 14 December 2022 on measures for a high common level of cybersecurity across the Union, amending Regulation (EU) No 910/2014 and Directive (EU) 2018/1972, and repealing Directive (EU) 2016/1148 (NIS 2 Directive)*. Official Journal of the European Union, L 333, 27.12.2022, p. 80. Retrieved October 19, 2026, from <https://eur-lex.europa.eu/eli/dir/2022/2555/oj>
|
|
112
|
-
|
|
113
|
-
<a id="oasis2023sarif"></a>Fanning, M. C., & Golding, L. J. (2023, August 28). *Static Analysis Results Interchange Format (SARIF) version 2.1.0 plus errata 01* [OASIS Standard incorporating Approved Errata]. OASIS. Retrieved October 19, 2026, from <https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/sarif-v2.1.0-errata01-os-complete.html>
|
|
114
|
-
|
|
115
|
-
<a id="mitrecwe"></a>The MITRE Corporation. (n.d.-a). *CWE: Common Weakness Enumeration*. Retrieved October 19, 2026, from <https://cwe.mitre.org/>
|
|
116
|
-
|
|
117
|
-
<a id="scarfone2008sp800115"></a>Scarfone, K. A., Souppaya, M. P., Cody, A., & Orebaugh, A. D. (2008). *Technical guide to information security testing and assessment* (NIST Special Publication 800-115). National Institute of Standards and Technology. <https://doi.org/10.6028/NIST.SP.800-115>
|
|
118
|
-
|
|
119
|
-
<a id="spdxlicenselist"></a>SPDX Workgroup, The Linux Foundation. (n.d.). *SPDX License List*. Retrieved October 19, 2026, from <https://spdx.org/licenses/>
|
package/docs/release-plan.md
DELETED
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
# Release plan: v1.2.0 → v1.4.0
|
|
2
|
-
|
|
3
|
-
The engineering plan behind the [roadmap](../ROADMAP.md): what ships in each
|
|
4
|
-
release, in what order, what each piece depends on, and how we know it is done.
|
|
5
|
-
Dates are targets, not promises. Building is fast; review, real-world testing,
|
|
6
|
-
and the 2FA release approval set the pace.
|
|
7
|
-
|
|
8
|
-
Written 2026-10-19. **Status:** both milestones shipped together as 1.4.0 on 2026-10-19, a few weeks ahead of the targets below.
|
|
9
|
-
|
|
10
|
-
## The bet
|
|
11
|
-
|
|
12
|
-
Two releases that move Penthera from "a good scanner" to a system that competes
|
|
13
|
-
with commercial supply-chain and AppSec platforms on their core value, while
|
|
14
|
-
keeping what they cannot copy: local, deterministic, explainable, no telemetry.
|
|
15
|
-
|
|
16
|
-
| Commercial platforms sell | Penthera answers with | Release |
|
|
17
|
-
|---------------------------|-----------------------|---------|
|
|
18
|
-
| Dependency capability alerts and upgrade diffs | `penthera deps` and `deps --diff` | v1.3.0 |
|
|
19
|
-
| Skill, extension, and MCP scanning | `penthera agents` and `penthera.lock` | v1.3.0 |
|
|
20
|
-
| PR comments on dependency changes | GitHub Action that comments the capability diff | v1.4.0 |
|
|
21
|
-
| An install firewall | `penthera install`: check before install scripts run | v1.4.0 |
|
|
22
|
-
| Auto-fix PRs | A local scan → fix → verify → learn loop that never pushes | v1.4.0 |
|
|
23
|
-
| Proof that it works | Published methodology, verified citations, a benchmark | v1.3.0 |
|
|
24
|
-
|
|
25
|
-
## Timeline at a glance
|
|
26
|
-
|
|
27
|
-
| When | Milestone |
|
|
28
|
-
|------|-----------|
|
|
29
|
-
| Oct 19–20 | v1.2.0 live on npm (2FA approval), old npm token deleted |
|
|
30
|
-
| Oct 20–22 | v1.3.0 PRs merged in order, release staged |
|
|
31
|
-
| Oct 23 | v1.3.0 live, launch write-up published |
|
|
32
|
-
| Oct 23–30 | v1.4.0 wave 1: HTTP client and egress guard, learning store, fix recipes, install firewall |
|
|
33
|
-
| Oct 30–Nov 6 | v1.4.0 wave 2: agent loop, custom reports, PR-comment Action |
|
|
34
|
-
| Nov 6–10 | Release gate: real-app test, benchmark diff, security review |
|
|
35
|
-
| Nov 10 | v1.4.0 live |
|
|
36
|
-
| From Nov 16 | Internal testing audit, landing page (see "Scheduled for later") |
|
|
37
|
-
| December | v1.5.0 (staged on the roadmap) |
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## v1.2.0: finish the release
|
|
42
|
-
|
|
43
|
-
| Step | Owner | Done when |
|
|
44
|
-
|------|-------|-----------|
|
|
45
|
-
| Approve the staged version on npmjs.com (Staged Packages, 2FA) | Maintainer | `npm view penthera version` is 1.2.0 with provenance |
|
|
46
|
-
| Delete the `NPM_TOKEN` repository secret | Maintainer | Secret gone; publishing is OIDC-only |
|
|
47
|
-
| Decide Dependabot #11 (`setup-node` v6 → v7) | Maintainer + CI | v7 changes how `NODE_AUTH_TOKEN` is handled. With no token left this is likely safe, but merge it only with a dry-run of `publish.yml` (`npm stage publish --dry-run`) on a branch first |
|
|
48
|
-
|
|
49
|
-
## v1.3.0 "AI toolchain": target Oct 22, live Oct 23
|
|
50
|
-
|
|
51
|
-
All four pieces are already built or in progress. The work is review and merge
|
|
52
|
-
order, because three of them touch `src/cli.js`, the README, and the CHANGELOG.
|
|
53
|
-
|
|
54
|
-
**Merge order:**
|
|
55
|
-
|
|
56
|
-
1. **#12 `penthera agents`.** Offline audit of `.mcp.json`, `~/.claude`,
|
|
57
|
-
`~/.cursor`, hooks, plugins, skills, and rule files. Includes the
|
|
58
|
-
hidden-content engine, `penthera.lock`, an A–F grade, and OWASP MCP / Agentic
|
|
59
|
-
mapping. Rebase on main, review, merge.
|
|
60
|
-
2. **Research and methodology.** `docs/METHODOLOGY.md`, verified
|
|
61
|
-
`references.bib`, per-finding citations in Markdown and SARIF,
|
|
62
|
-
`CITATION.cff`, an offline benchmark with precision and recall. Rebase
|
|
63
|
-
after #12 (both touch the reporters).
|
|
64
|
-
3. **`penthera deps`.** Static capability detection on `node_modules`,
|
|
65
|
-
`--diff` between lockfiles, typosquat check against a vendored list, and an
|
|
66
|
-
opt-in `--online` registry check. Rebase after the research PR.
|
|
67
|
-
4. **Funding pack.** Docs only, any order.
|
|
68
|
-
|
|
69
|
-
**Also in v1.3.0:**
|
|
70
|
-
|
|
71
|
-
| Item | Why | Size |
|
|
72
|
-
|------|-----|------|
|
|
73
|
-
| Bump to 1.3.0 everywhere, CHANGELOG, tag, approve | Release | S |
|
|
74
|
-
| Launch write-up: an offline audit of popular public skills and MCP servers with `penthera agents` | The post that earns attention. Read-only analysis of public repos, findings reported to authors privately first | M |
|
|
75
|
-
|
|
76
|
-
**Release gate:** `npm test` green, benchmark numbers in `bench/RESULTS.md` no
|
|
77
|
-
worse than v1.2.0, `penthera agents` and `penthera deps` run cleanly on this
|
|
78
|
-
repo, every citation verified.
|
|
79
|
-
|
|
80
|
-
## v1.4.0 "Local loop + competitive": target Nov 10
|
|
81
|
-
|
|
82
|
-
### Wave 1 (parallel, Oct 23–30)
|
|
83
|
-
|
|
84
|
-
Each workstream owns different files, so they can be built side by side.
|
|
85
|
-
|
|
86
|
-
**W1. One HTTP client, `--offline` egress guard, User-Agent, inconclusive probes**
|
|
87
|
-
- Every network call goes through `src/utils/http.js`. Today `crawler`,
|
|
88
|
-
`injections`, `fuzzer`, `templates`, `recon`, `params`, `retirejs`, and
|
|
89
|
-
`adaptive-probes` each build their own fetch wrapper.
|
|
90
|
-
- `--offline`: the client refuses any host other than the scan target. Recon
|
|
91
|
-
sources (crt.sh, Wayback, OTX) become explicit opt-ins.
|
|
92
|
-
- Vendor a Retire.js database snapshot, refreshed by a release script, so JS
|
|
93
|
-
CVE checks work offline.
|
|
94
|
-
- Send `penthera/<version> (+repo url)` as the User-Agent (closes #7).
|
|
95
|
-
- Probe errors are recorded and reported as "inconclusive" instead of passing
|
|
96
|
-
silently (closes #8).
|
|
97
|
-
- While rewriting `lib/injections.js` and `lib/fuzzer.js`: an honest header,
|
|
98
|
-
and payload strings moved into a clearly named data file. Socket's AI judge
|
|
99
|
-
flagged Penthera as malware for containing test payloads; this gives any
|
|
100
|
-
reviewer the context a snippet lacks. Then ask Socket to review the alert.
|
|
101
|
-
- **Done when:** a test that blocks all egress except the target passes for
|
|
102
|
-
every profile, and the vendored database matches upstream at release time.
|
|
103
|
-
|
|
104
|
-
**W2. Local learning store**
|
|
105
|
-
- `~/.penthera/memory/<project-hash>/events.jsonl`: append-only; each event
|
|
106
|
-
carries the hash of the previous one.
|
|
107
|
-
- Events: scan summary, fix applied (recipe, diff hash), fix verified or
|
|
108
|
-
failed, false positive suppressed (fingerprint, reason), probe yield per
|
|
109
|
-
stack.
|
|
110
|
-
- Derived views: recipe success rate per framework, active suppressions,
|
|
111
|
-
probe ranking. Used only to re-rank and suppress; never executes anything.
|
|
112
|
-
- `penthera memory show | verify | forget`. `verify` detects any edit to the
|
|
113
|
-
chain.
|
|
114
|
-
- Never read from the scanned repo. A suppression committed to a repo is shown
|
|
115
|
-
in the report as "suppressed by repo file" so a reviewer sees it.
|
|
116
|
-
- **Done when:** tampering with any line fails `verify`, and suppressions and
|
|
117
|
-
re-ranking are covered by tests.
|
|
118
|
-
|
|
119
|
-
**W3. Fix recipes**
|
|
120
|
-
- `lib/fix/`: deterministic codemods that produce a unified diff for the most
|
|
121
|
-
common findings:
|
|
122
|
-
- security headers for Next.js, Express (helmet), Fastify, and Hono;
|
|
123
|
-
- cookie flags;
|
|
124
|
-
- a CORS allowlist;
|
|
125
|
-
- a rate-limit stub on auth routes;
|
|
126
|
-
- moving a hardcoded secret to an environment variable, with "rotate it" as
|
|
127
|
-
an owner action.
|
|
128
|
-
- Framework detection reuses `lib/whitebox/frameworks.js`.
|
|
129
|
-
- Optional local model adapter (Ollama on localhost, enforced by W1) for
|
|
130
|
-
findings without a recipe. Its output is labelled "model-suggested,
|
|
131
|
-
needs-human-review".
|
|
132
|
-
- **Done when:** each recipe has before/after fixtures, and every produced diff
|
|
133
|
-
applies cleanly and makes its finding disappear on re-scan in the fixture app.
|
|
134
|
-
|
|
135
|
-
**W4. Install firewall**
|
|
136
|
-
- `penthera install [pkg...]`: resolve the dependency tree with scripts
|
|
137
|
-
disabled, run the `deps` capability diff against the current lockfile, show
|
|
138
|
-
what is new (install scripts, network, shell, env), and only then run the
|
|
139
|
-
real install, either after a prompt or under a policy file
|
|
140
|
-
(`penthera.policy.json`).
|
|
141
|
-
- **Done when:** a fixture package that gains an install script is stopped
|
|
142
|
-
before its script runs.
|
|
143
|
-
|
|
144
|
-
### Wave 2 (Oct 30–Nov 6)
|
|
145
|
-
|
|
146
|
-
**W5. Agent loop: `penthera agent --loop`** (depends on W1, W2, W3)
|
|
147
|
-
- State machine: scan → triage (ranked by memory) → plan (recipe or model
|
|
148
|
-
suggestion) → patch on a local branch `penthera/fix-<date>` → verify
|
|
149
|
-
(re-scan, plus the project's tests if present) → learn → repeat.
|
|
150
|
-
- Stops when nothing fixable remains or `--max-iterations` is reached.
|
|
151
|
-
- Every diff needs approval by default. `--auto low` auto-applies only
|
|
152
|
-
recipes with a verified success history in memory.
|
|
153
|
-
- Hard guarantees, each with a test:
|
|
154
|
-
- never pushes, never opens pull requests, never calls a remote;
|
|
155
|
-
- egress is limited to the target;
|
|
156
|
-
- the working tree must be clean before it starts.
|
|
157
|
-
- **Done when:** on the fixture app the loop takes the findings to zero in a
|
|
158
|
-
bounded number of iterations, and a second run is faster because memory
|
|
159
|
-
re-ranked the recipes.
|
|
160
|
-
|
|
161
|
-
**W6. Custom reports and evidence bundle** (depends on W2)
|
|
162
|
-
- Audience templates: developer, owner, auditor. User templates via
|
|
163
|
-
`--report-template file.md` with a small placeholder syntax that evaluates
|
|
164
|
-
no code.
|
|
165
|
-
- Loop timeline: found → fixed → verified, with time-to-fix from memory.
|
|
166
|
-
- `--evidence <dir>`: reports plus a `manifest.json` with the SHA-256 of
|
|
167
|
-
every artifact. Optional signing with a local SSH key
|
|
168
|
-
(`ssh-keygen -Y sign`), no new dependency.
|
|
169
|
-
- **Done when:** an auditor can verify a bundle with one documented command.
|
|
170
|
-
|
|
171
|
-
**W7. PR-comment GitHub Action** (depends on `deps` from v1.3.0)
|
|
172
|
-
- A composite action published from this repo: on PRs that change a lockfile
|
|
173
|
-
it runs `penthera deps --diff` against the base branch, posts or updates a
|
|
174
|
-
single comment ("2 packages gained network access, 1 new install script"),
|
|
175
|
-
and uploads SARIF.
|
|
176
|
-
- Pinned by SHA in the docs; no secrets needed beyond the default token.
|
|
177
|
-
- **Done when:** it runs on a test PR in this repo and the comment updates in
|
|
178
|
-
place on a new push.
|
|
179
|
-
|
|
180
|
-
**W8. Skill and docs**
|
|
181
|
-
- SKILL.md workflow "scan and fix" uses `penthera agent`.
|
|
182
|
-
- `docs/local-loop.md` explains the threat model: why nothing leaves the
|
|
183
|
-
machine, why the store is hash-chained, why rules never update at runtime.
|
|
184
|
-
|
|
185
|
-
### Release gate (Nov 6–10)
|
|
186
|
-
|
|
187
|
-
- Run the loop on one real app the maintainer owns, not only fixtures.
|
|
188
|
-
- Benchmark: precision and recall no worse than v1.3.0.
|
|
189
|
-
- Self-scan with `penthera --repo .`, `penthera agents`, and `penthera deps`:
|
|
190
|
-
no new high findings.
|
|
191
|
-
- Security review of the diff since v1.3.0, focused on the loop and the
|
|
192
|
-
firewall (they run commands and write code).
|
|
193
|
-
- Then bump to 1.4.0, tag, approve.
|
|
194
|
-
|
|
195
|
-
## Risks
|
|
196
|
-
|
|
197
|
-
| Risk | Mitigation |
|
|
198
|
-
|------|------------|
|
|
199
|
-
| Three PRs conflict in `src/cli.js` | Strict merge order, rebase each after the previous one lands. Consider splitting subcommands into `src/commands/` early in v1.4.0 |
|
|
200
|
-
| Fix recipes break someone's app | Diffs only, approval by default, verify by re-scan and tests, a local branch only |
|
|
201
|
-
| The learning store becomes an attack surface | Home directory only, hash chain, re-rank and suppress only, nothing executable |
|
|
202
|
-
| Install firewall false positives annoy users | Show the capability diff, not a verdict; a policy file to allow known packages |
|
|
203
|
-
| Another AI-judge false positive on new modules | Honest headers, payloads in data files, Socket review requested |
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## Scheduled for later (from Nov 16)
|
|
208
|
-
|
|
209
|
-
**Internal testing audit.** A standing quality gate run before every release:
|
|
210
|
-
- Penthera against itself and a fixed set of deliberately vulnerable apps
|
|
211
|
-
(mock server, OWASP Juice Shop, crAPI).
|
|
212
|
-
- `agents` and `deps` against fixture configs.
|
|
213
|
-
- A diff of results against the previous release, with false positives and
|
|
214
|
-
false negatives triaged into issues.
|
|
215
|
-
- A scheduled weekly run, so drift shows up between releases.
|
|
216
|
-
- The results feed `bench/RESULTS.md`.
|
|
217
|
-
|
|
218
|
-
**Landing page.** A one-page site: what it does, the 30-second install, the
|
|
219
|
-
trust story (offline, staged releases, methodology, benchmark), and links to
|
|
220
|
-
the docs. Static, hosted on GitHub Pages, with no tracking scripts, in keeping
|
|
221
|
-
with the no-telemetry principle.
|
|
222
|
-
|
|
223
|
-
## v1.5.0 and beyond
|
|
224
|
-
|
|
225
|
-
Staged on the [roadmap](../ROADMAP.md): LLM endpoint probes, OWASP LLM
|
|
226
|
-
mapping, the CRA Article 14 helper, the AI-BOM, a pre-commit hook, license
|
|
227
|
-
policy, and signed rule packs. After that: the local dashboard (`penthera ui`)
|
|
228
|
-
and a team pack.
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
# How Socket positions itself: notes for Penthera's docs
|
|
2
|
-
|
|
3
|
-
*Read on 2026-10-19. Everything below is paraphrased; the few quoted words are
|
|
4
|
-
marked. Socket's pages change often, so treat numbers as a snapshot.*
|
|
5
|
-
|
|
6
|
-
[Socket](https://socket.dev) is a well-funded supply-chain security company and
|
|
7
|
-
one of the clearest communicators in the field. These notes look at how it
|
|
8
|
-
explains itself, so Penthera can learn from the craft without copying the claims
|
|
9
|
-
or picking a fight. Penthera is a complement to Socket, not a rival: Socket
|
|
10
|
-
watches the registries from the cloud; Penthera checks your app and your machine
|
|
11
|
-
offline.
|
|
12
|
-
|
|
13
|
-
## 1. The headline promise
|
|
14
|
-
|
|
15
|
-
- The hero line is about securing software at "AI speed", with a sub-line that
|
|
16
|
-
promises to stop malicious packages before they reach your code
|
|
17
|
-
([home](https://socket.dev/)). The tab title frames it as blocking zero-day
|
|
18
|
-
supply-chain attacks.
|
|
19
|
-
- The core argument is one contrast, repeated on nearly every page: a CVE
|
|
20
|
-
database lists accidental vulnerabilities after disclosure, while a malicious
|
|
21
|
-
package is intentional and has to be stopped before install. Socket claims the
|
|
22
|
-
second half that CVE scanners miss
|
|
23
|
-
([features](https://socket.dev/features),
|
|
24
|
-
[supply-chain attack prevention](https://socket.dev/use-case/supply-chain-attack-prevention)).
|
|
25
|
-
- AI is the urgency: coding agents pull in dependencies faster than people can
|
|
26
|
-
review them, so the attack surface grows
|
|
27
|
-
([features](https://socket.dev/features), [Series C post](https://socket.dev/blog/series-c)).
|
|
28
|
-
- A speed claim backs the promise: malicious packages flagged within minutes of
|
|
29
|
-
publication ([home](https://socket.dev/)).
|
|
30
|
-
|
|
31
|
-
**Takeaway.** One sentence of promise, one contrast that explains why existing
|
|
32
|
-
tools are not enough, and one reason it matters now. Penthera's equivalent: one
|
|
33
|
-
promise (check, vet, keep watching, on your machine), one contrast (rules you can
|
|
34
|
-
read versus a verdict from a service), and the same "now" (AI writes the code and
|
|
35
|
-
picks the packages).
|
|
36
|
-
|
|
37
|
-
## 2. Who they sell to
|
|
38
|
-
|
|
39
|
-
- **Buyers are security leaders.** The case-study quotes come from a CISO
|
|
40
|
-
(Anthropic), a head of security (Vercel), senior security engineers (MetaMask,
|
|
41
|
-
Drata) ([customers](https://socket.dev/customers)).
|
|
42
|
-
- **Developers are the way in.** The free GitHub app, the CLI and the `sfw`
|
|
43
|
-
firewall are the self-serve entry points, and comparison pages carry a wall of
|
|
44
|
-
developer tweets ([vs Snyk](https://socket.dev/compare/socket-vs-snyk)).
|
|
45
|
-
- **AI-native companies** are named prominently: Anthropic, Cursor, Replit,
|
|
46
|
-
Vercel and others ([Series C post](https://socket.dev/blog/series-c)).
|
|
47
|
-
- **Credibility from the team**: the founders present themselves as open-source
|
|
48
|
-
maintainers whose packages are downloaded at very large scale
|
|
49
|
-
([FAQ](https://socket.dev/faq)).
|
|
50
|
-
- **Pricing** is per developer seat ([pricing](https://socket.dev/pricing)):
|
|
51
|
-
a free plan for one seat with 1,000 scans a month and a lot included (GitHub
|
|
52
|
-
app, AI analysis, MCP server, install firewall); Team at $25 a seat a month
|
|
53
|
-
with a 5-seat minimum (adds reachability); Business at $50 with a 20-seat
|
|
54
|
-
minimum (adds SBOM, SSO, AI-model and Actions scanning); Enterprise on quote
|
|
55
|
-
(adds self-hosting options, other SCMs, and SAST, secrets and container scanning
|
|
56
|
-
under "Socket Basics").
|
|
57
|
-
- **Open source**: public OSI-licensed projects can get the Business plan free
|
|
58
|
-
as of August 2026
|
|
59
|
-
([announcement](https://socket.dev/blog/free-business-plan-upgrades-for-open-source)).
|
|
60
|
-
The pricing page still mentions the older free Team offer.
|
|
61
|
-
|
|
62
|
-
**Takeaway.** Socket speaks to the person who signs off and lets the developer
|
|
63
|
-
install it. Penthera has no buyer. Its audiences are people doing the work with
|
|
64
|
-
no security team behind them: a founder before launch, a team adopting coding
|
|
65
|
-
agents, a maintainer, a small EU company, an agency. So Penthera's use-case pages
|
|
66
|
-
are organised by situation, not by job title.
|
|
67
|
-
|
|
68
|
-
## 3. How use cases and comparisons are structured
|
|
69
|
-
|
|
70
|
-
**Comparison pages** ([Snyk](https://socket.dev/compare/socket-vs-snyk),
|
|
71
|
-
[Dependabot](https://socket.dev/compare/socket-vs-dependabot),
|
|
72
|
-
[Semgrep](https://socket.dev/compare/socket-vs-semgrep)) share one template:
|
|
73
|
-
|
|
74
|
-
1. "Socket vs X" with a benefit subtitle.
|
|
75
|
-
2. Two paragraphs placing the competitor in the "known vulnerabilities only" box.
|
|
76
|
-
3. Install and contact-sales buttons.
|
|
77
|
-
4. A feature table of 8 or 9 rows with checks and dashes.
|
|
78
|
-
5. A second row of buttons, then a tweet wall, then a footer call to action.
|
|
79
|
-
|
|
80
|
-
They concede little. Snyk gets checks for known vulnerabilities, licence
|
|
81
|
-
enforcement and an API; Dependabot only for known vulnerabilities. Categories
|
|
82
|
-
where the competitor is stronger (SAST depth, containers, IaC, DAST) do not
|
|
83
|
-
appear. There are no prices, benchmarks or third-party sources in the tables.
|
|
84
|
-
|
|
85
|
-
**Use-case pages** ([open source](https://socket.dev/use-case/open-source-security),
|
|
86
|
-
[SCA](https://socket.dev/use-case/sca),
|
|
87
|
-
[supply-chain attack prevention](https://socket.dev/use-case/supply-chain-attack-prevention))
|
|
88
|
-
mix an SEO definition ("what is SCA"), a problem framing, a feature checklist and
|
|
89
|
-
a live feed of recently blocked packages. The feed is the most persuasive
|
|
90
|
-
element: it shows the product working today.
|
|
91
|
-
|
|
92
|
-
There is no standalone "Why Socket" page; it is a menu that groups the case
|
|
93
|
-
studies and comparisons. The closest page is
|
|
94
|
-
[features](https://socket.dev/features).
|
|
95
|
-
|
|
96
|
-
**Takeaway.** Copy the shape (one page per audience, one per alternative, a
|
|
97
|
-
table that is quick to scan), not the tone. Penthera's comparison pages say
|
|
98
|
-
"use together", name where the other tool goes further, link every claim to the
|
|
99
|
-
vendor's own docs, and carry a last-checked date. That honesty is the
|
|
100
|
-
differentiator Penthera can afford and a funded vendor often cannot.
|
|
101
|
-
|
|
102
|
-
## 4. How they use proof
|
|
103
|
-
|
|
104
|
-
- **Big numbers** on the home page: about 11.6 million commits secured a month, 1.5 million repositories, 27,000
|
|
105
|
-
organisations, 10,000 attacks blocked a week ([home](https://socket.dev/)).
|
|
106
|
-
The same metric differs across pages (risk signals: 70, 80 or 85; unique threat
|
|
107
|
-
detections: 26,000 on [features](https://socket.dev/features) versus 300,000 on
|
|
108
|
-
the home page).
|
|
109
|
-
- **Logos and case studies.** The strongest one, Anthropic, gives an outcome:
|
|
110
|
-
most dependency reviews automated and hours saved each week per engineer
|
|
111
|
-
([Anthropic](https://socket.dev/case-study/anthropic)). Vercel and Drata
|
|
112
|
-
describe workflow and hygiene rather than numbers
|
|
113
|
-
([Vercel](https://socket.dev/case-study/vercel), [Drata](https://socket.dev/case-study/drata)).
|
|
114
|
-
MetaMask's engineer says openly that some false positives are an acceptable
|
|
115
|
-
price for early warning ([MetaMask](https://socket.dev/case-study/metamask)).
|
|
116
|
-
The Replit story was not retrievable (HTTP 403); its index card is about
|
|
117
|
-
reducing false positives.
|
|
118
|
-
- **Funding and badges**: total raised, a $1 billion valuation, SOC 2 Type 2, a
|
|
119
|
-
Fortune list, and an OpenAI early-access programme
|
|
120
|
-
([home](https://socket.dev/), [Series C post](https://socket.dev/blog/series-c)).
|
|
121
|
-
- **Research as proof**: threat write-ups with timestamps showing when the AI
|
|
122
|
-
scanner flagged an attack, plus downloadable indicators
|
|
123
|
-
([Rust crates post](https://socket.dev/blog/popular-rust-crates-compromised)).
|
|
124
|
-
- **No accuracy numbers.** No false-positive rate for malware verdicts is
|
|
125
|
-
published; false-positive language appears only for reachability cutting CVE
|
|
126
|
-
noise.
|
|
127
|
-
|
|
128
|
-
**Takeaway.** Penthera has no logos, no funding and no usage telemetry (by
|
|
129
|
-
design, it has no way to count users). What it can show is what a reader can
|
|
130
|
-
check: benchmark precision and recall with every miss listed, rule and test
|
|
131
|
-
counts generated from the code, a cited methodology, an OpenSSF Scorecard, and
|
|
132
|
-
2FA-approved releases with provenance. That is the "By the numbers" block in the
|
|
133
|
-
README, refreshed by `npm run docs:numbers`.
|
|
134
|
-
|
|
135
|
-
## 5. Calls to action
|
|
136
|
-
|
|
137
|
-
- Every page pairs a free self-serve action (install the GitHub app) with a sales
|
|
138
|
-
action (book a demo or contact sales) ([home](https://socket.dev/), compare and
|
|
139
|
-
use-case pages).
|
|
140
|
-
- Product pages lead with the install command
|
|
141
|
-
([CLI](https://socket.dev/features/cli),
|
|
142
|
-
[firewall](https://socket.dev/features/firewall)); every blog post ends with a
|
|
143
|
-
free firewall card.
|
|
144
|
-
- An urgency line: a phone number for teams under active attack.
|
|
145
|
-
|
|
146
|
-
**Takeaway.** Penthera has no sales step, so its call to action is the command
|
|
147
|
-
itself. The README opens with three `npx` commands that each take under a
|
|
148
|
-
minute and need no account.
|
|
149
|
-
|
|
150
|
-
## 6. What they leave unsaid
|
|
151
|
-
|
|
152
|
-
| Topic | What Socket's pages say | Room for Penthera |
|
|
153
|
-
|---|---|---|
|
|
154
|
-
| Offline use | No offline or air-gapped mode documented. Even self-hosted firewall modes check packages against Socket's API ([firewall free](https://docs.socket.dev/docs/socket-firewall-free), [pricing](https://socket.dev/pricing)). Only manifests and lockfiles are sent, not source ([FAQ](https://socket.dev/faq)) | Everything runs locally; `--offline` limits traffic to the named target |
|
|
155
|
-
| Deterministic verdicts | Static analysis first, then an LLM stage, then human review before a package is labelled known malware ([AI alert](https://socket.dev/alerts/gptMalware)). No claim of reproducible results | Same input, same output, with the rule and `file:line` for each finding |
|
|
156
|
-
| App and runtime security | No DAST or live-URL testing; first-party SAST and secrets only on Enterprise | URL and repo scans, fix recipes, verification |
|
|
157
|
-
| AI tooling | Covers it as packages: an MCP server for package lookups ([MCP guide](https://docs.socket.dev/docs/guide-to-socket-mcp)), firewall ecosystems that include agent skills and models ([firewall](https://socket.dev/features/firewall)), research on malicious MCP servers ([labs](https://socket.dev/labs)). Nothing found that audits a repo's own agent config | `penthera agents`: CLAUDE.md, `.mcp.json`, hooks, permissions, plugins, rule files |
|
|
158
|
-
| EU compliance | SBOM export (CycloneDX, SPDX, OpenVEX) on Business and up; no NIS2 or CRA page found; compliance messaging is SOC 2 and Vanta-style integrations | NIS2 readiness, CRA Article 14 drafts, SBOM and AI-BOM, signable evidence, free |
|
|
159
|
-
|
|
160
|
-
Two cautions. Socket does cover parts of AI tooling, and says so; Penthera's docs
|
|
161
|
-
should not claim it does not. And the AI-versus-rules point should be made
|
|
162
|
-
calmly: Socket's AI scanner once flagged Penthera itself as malware because the
|
|
163
|
-
repository contains real test payloads. That is a fair example of the trade-off,
|
|
164
|
-
not a gotcha. AI stages catch novel attacks that no rule anticipated; rules
|
|
165
|
-
explain themselves and do not misread intent. Running both is reasonable.
|
|
166
|
-
|
|
167
|
-
## 7. What Penthera's docs take from this
|
|
168
|
-
|
|
169
|
-
1. **A three-command "Try it in 60 seconds" block** near the top of the README,
|
|
170
|
-
as the call to action.
|
|
171
|
-
2. **Use-case pages by situation**, each with the problem, what to run, real
|
|
172
|
-
example output, and what Penthera does not do
|
|
173
|
-
([docs/use-cases/](../use-cases/README.md)).
|
|
174
|
-
3. **Comparison pages framed as "use together"**, with factual tables, where the
|
|
175
|
-
other tool goes further, links to the vendor's docs, and a last-checked date
|
|
176
|
-
([docs/compare/](../compare/README.md)).
|
|
177
|
-
4. **Proof without logos**: a short "By the numbers" block in the README, every
|
|
178
|
-
number checkable and refreshable.
|
|
179
|
-
5. **A shorter README** that points to per-command pages instead of carrying
|
|
180
|
-
every flag.
|
|
181
|
-
|
|
182
|
-
Things deliberately not copied: inflated or inconsistent numbers, tweet walls,
|
|
183
|
-
competitor tables that only list the author's strengths, and urgency language.
|
package/docs/use-cases/README.md
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Use cases
|
|
2
|
-
|
|
3
|
-
Each page starts from a situation, not a feature: the problem, what to run, what
|
|
4
|
-
the output looks like, and what Penthera does not do for you.
|
|
5
|
-
|
|
6
|
-
| You are | Page |
|
|
7
|
-
|---|---|
|
|
8
|
-
| A solo founder or vibecoder about to launch | [Before launch](solo-founder.md) |
|
|
9
|
-
| A team adopting Claude Code or Cursor | [The AI-tooling supply chain](ai-coding-teams.md) |
|
|
10
|
-
| An open-source maintainer | [For maintainers](open-source-maintainers.md) |
|
|
11
|
-
| An EU SME with NIS2 or CRA duties | [Evidence for NIS2 and the CRA](eu-sme-compliance.md) |
|
|
12
|
-
| An agency shipping client apps | [A repeatable handover check](agencies.md) |
|
|
13
|
-
|
|
14
|
-
Using another security tool already? See [how Penthera fits with it](../compare/README.md).
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# A repeatable handover check: for agencies shipping client apps
|
|
2
|
-
|
|
3
|
-
## The problem
|
|
4
|
-
|
|
5
|
-
An agency ships many similar apps for clients who assume security was handled.
|
|
6
|
-
Each project has a different team, a different deadline and a launch date that
|
|
7
|
-
does not move. A security review by a person for every launch is too expensive,
|
|
8
|
-
and "we followed best practice" does not survive a client's procurement
|
|
9
|
-
questionnaire or an incident.
|
|
10
|
-
|
|
11
|
-
## What to run
|
|
12
|
-
|
|
13
|
-
The same three steps on every project, in CI or before handover:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npx penthera https://preview.client.example --repo . --profile standard \
|
|
17
|
-
--sarif reports/scan.sarif -o reports/scan.json
|
|
18
|
-
npx penthera deps --license-policy permissive # dependency capabilities and licences
|
|
19
|
-
npx penthera agents # the agent config left in the repo
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
At handover, give the client a report written for them and a bundle they can
|
|
23
|
-
keep:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
npx penthera https://client.example --repo . --audience owner > security-summary.md
|
|
27
|
-
npx penthera https://client.example --repo . --audience auditor \
|
|
28
|
-
--evidence handover/2026-10-19 --sign-key ~/.ssh/agency_ed25519
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Pin the Penthera version in CI so every project is checked by the same rules,
|
|
32
|
-
and use `--baseline` to show only what is new since the last scan.
|
|
33
|
-
|
|
34
|
-
## What you get
|
|
35
|
-
|
|
36
|
-
The owner report is in plain language. From Penthera's own mock target:
|
|
37
|
-
|
|
38
|
-
```markdown
|
|
39
|
-
# Security summary
|
|
40
|
-
|
|
41
|
-
## In short
|
|
42
|
-
|
|
43
|
-
Penthera checked http://localhost:8765 and found **2 serious problems** to fix
|
|
44
|
-
this week, 5 moderate, 2 minor, 2 notes. The serious ones are things an attacker
|
|
45
|
-
could use today.
|
|
46
|
-
|
|
47
|
-
## What to do first
|
|
48
|
-
|
|
49
|
-
1. **Harden authentication and access control** (involved, a developer can do this). ...
|
|
50
|
-
2. **Remove the exposed file or interface from production** (quick, a developer can do this). ...
|
|
51
|
-
3. **Add a Content-Security-Policy header** (moderate, a developer can do this). ...
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
The auditor version covers scope and method, every finding with its evidence and
|
|
55
|
-
confidence, the hosts contacted, and the probes that could not run. The evidence bundle hashes every file in a
|
|
56
|
-
signed manifest, so the client can check later that nothing was edited.
|
|
57
|
-
`--report-template` puts the same data into your own Markdown template.
|
|
58
|
-
[More on reports and evidence](../evidence.md).
|
|
59
|
-
|
|
60
|
-
## What it does not do
|
|
61
|
-
|
|
62
|
-
- It does not replace a penetration test where a contract or a regulator asks for
|
|
63
|
-
one. It makes that test cheaper, because the routine findings are already gone.
|
|
64
|
-
- It only scans what you point it at, with the client's permission. Get the scope
|
|
65
|
-
in writing.
|
|
66
|
-
- Fix recipes cover common JavaScript and TypeScript frameworks. Other stacks get
|
|
67
|
-
findings and guidance, not diffs.
|
|
68
|
-
- It does not monitor client production after handover yet. That is on the
|
|
69
|
-
[roadmap](../../ROADMAP.md).
|
|
70
|
-
|
|
71
|
-
[All use cases](README.md) · [Back to the README](../../README.md)
|