prbl-scanner
Open source vulnerability scanner for AI-generated code.
Prbl finds the security vulnerabilities that AI coding tools produce systematically — the patterns that exist because of how LLMs were trained, not because of developer mistakes.
What it detects
-
PRBL-C001 — Hardcoded credentials and fallback secrets
CWE-798 · OWASP A07 · #7 most critical web security risk
Detects API keys, passwords, and tokens hardcoded directly in source code. Also catches the AI-specific fallback pattern:process.env.SECRET || 'default_value'where the fallback becomes the live secret for any deployment missing the environment variable. -
PRBL-R001 — Weak randomness in security contexts
CWE-338 · OWASP A04 · #4 most critical web security risk
Flags Math.random(), random.random(), and related functions when used to generate tokens, session IDs, passwords, or OTPs. These functions are not cryptographically secure — their output is predictable. -
PRBL-I001 — SQL injection including multi-line patterns
CWE-89 · OWASP A05 · #5 most critical web security risk
Detects user input concatenated or interpolated into SQL queries, including multi-line query construction patterns that most scanners miss. -
PRBL-I002 — Command injection
CWE-78 · OWASP A05 · #5 most critical web security risk
Detects user input passed to shell commands via exec, spawn, system, popen, subprocess.run, and shell=True. -
PRBL-I003 — Code injection (eval/exec)
CWE-94/95 · OWASP A05 · #5 most critical web security risk
Detects user input passed to eval(), exec(), new Function(), or compile(). Gives an attacker full code execution on the server. -
PRBL-A001 — Missing access control including serverless handlers
CWE-862 · OWASP A01 · #1 most critical web security risk
Detects route handlers and serverless functions that perform sensitive operations (database access, payment processing, user data) with no visible authentication or authorization check. -
PRBL-P001 — Hallucinated package references
Emerging — no CWE · OWASP A03 · Supply Chain Failures
Detects imports of packages that do not exist on PyPI or npm. AI models invent plausible-sounding package names. An attacker who registers the name with a malicious payload gets code execution on every machine that runs install.
Security Standards Mapping
Every Prbl rule maps to established security standards. When a developer asks an AI tool "how serious is this finding?" — the CWE and OWASP category give it the full context to answer accurately.
| Rule | Name | CWE | OWASP 2025 | OWASP Rank |
|---|---|---|---|---|
| PRBL-C001 | Hardcoded Credentials | CWE-798 | A07 — Authentication Failures | #7 |
| PRBL-R001 | Weak Randomness | CWE-338 | A04 — Cryptographic Failures | #4 |
| PRBL-I001 | SQL Injection | CWE-89 | A05 — Injection | #5 |
| PRBL-I002 | Command Injection | CWE-78 | A05 — Injection | #5 |
| PRBL-I003 | Code Injection | CWE-94/95 | A05 — Injection | #5 |
| PRBL-A001 | Missing Access Control | CWE-862 | A01 — Broken Access Control | #1 |
| PRBL-P001 | Hallucinated Packages | Emerging — no CWE | A03 — Supply Chain Failures | #3 |
Why PRBL-P001 has no CWE
Hallucinated package references are a new vulnerability class created by AI coding tools. Standard CWE scanners cannot detect this by definition — there is no CWE entry because this failure mode did not exist before LLMs generated code at scale. Prbl is the only scanner that catches it.
PRBL-P001 maps to OWASP A03 (Supply Chain Failures) because a malicious actor can register the hallucinated package name on PyPI or npm — turning every project using that AI-generated import into an unintentional malware distribution point.
Why open source
Security tools that scan your code should be auditable. These are the exact rules Prbl uses. Nothing hidden.
Install
pip install prbl-scanner
Usage
prbl-scanner scan ./myproject
JSON output
Every finding includes CWE and OWASP fields for downstream tooling:
{
"rule_id": "PRBL-C001",
"title": "Hardcoded credential: Stripe live secret key",
"cwe": "CWE-798",
"owasp_category": "A07 — Authentication Failures",
"owasp_rank": 7,
"severity": "HIGH",
"file": "auth/stripe.py",
"line": 14,
"detail": "...",
"fix": "..."
}
Validated against
74 public repos across Django, FastAPI, Express, NestJS, and full-stack codebases. 6.25% false positive rate.
Contributing
Found a new AI vulnerability pattern? Open a PR. Rule format is documented in CONTRIBUTING.md.
License
MIT
Metadata
Release files for prbl-scanner 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| prbl_scanner-0.1.0.tar.gz | 31.8 kB | Without provenance | Details for prbl_scanner-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| prbl_scanner-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for prbl_scanner-0.1.0-py3-none-any.whl |
Total release size: 63.3 kB
Release files / prbl_scanner-0.1.0.tar.gz
| Download URL | prbl_scanner-0.1.0.tar.gz |
|---|---|
| Size | 31.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6176e1522943ecbd140a671879094f13980a51e325c65cad8cc2feacb9aa2f5
|
|
BLAKE2b-256 checksum How to use checksums |
ec13212171f6dffb65c50cfcc95b7a747ff2ad10ca800a9b3482e21b122897a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / prbl_scanner-0.1.0-py3-none-any.whl
| Download URL | prbl_scanner-0.1.0-py3-none-any.whl |
|---|---|
| Size | 31.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ab01aac9e59f3d26c6498a0dd5934e70245398ccc5a817ed10285dfbd0bd3934
|
|
BLAKE2b-256 checksum How to use checksums |
af77bb340fbc8557f34369537a384a864dcc2d29fe5a7a6bb3ce4a7f22b99648
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Security for prbl-scanner 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.