Static analysis for authorization gaps (IDOR/CWE-639), missing authorization, SQL injection, and 30+ vulnerability types across Python, JavaScript, Go, Java, C#, and 35+ other languages.
Project description
Guardmarly — Static analysis for authorization gaps and risky code paths
Focused on missing object-level authorization checks (IDOR / broken access control) and related security findings across supported languages.
pip install guardmarly && guardmarly src/
The problem
Authorization bugs — IDOR, missing access controls, privilege escalation — caused some of the largest data breaches in history. Most SAST tools can't find these bugs because they require tracing data from HTTP routes through auth guards into database queries.
What Guardmarly does differently
@app.route("/invoice/<id>")
def get_invoice(id):
return Invoice.query.get(id)
# ↑ CWE-639 IDOR: any user can view any invoice
# Bandit: silent. Semgrep OSS: silent. CodeQL: silent.
# Guardmarly: 🚨 CRITICAL — route flows to DB without auth check
Guardmarly maps every HTTP route, checks for auth guards, traces data flow to sinks, and flags the gap.
Quick start
pip install guardmarly
guardmarly src/ # text output
guardmarly src/ --format json -o r.json # JSON report
guardmarly src/ --format sarif # SARIF for GitHub
guardmarly --show-stats # lifetime + today counts
guardmarly --list-rules # full rule catalog
Supported languages & CWEs
5 full-AST languages: Python, JavaScript/TypeScript, Go, Java, C#
35+ pattern-aware languages: PHP, Ruby, Kotlin, Swift, Dart, Rust, Scala, Elixir, C/C++, Lua, and 25+ more
35+ CWE types: IDOR (CWE-639), Missing Auth (CWE-862/306), SQLi (CWE-89), Command Injection (CWE-78), XSS (CWE-79), Path Traversal (CWE-22), SSRF (CWE-918), Deserialization (CWE-502), Hardcoded Secrets (CWE-798), Open Redirect (CWE-601), CSRF (CWE-352), XXE (CWE-611), and 25+ more.
Evidence: See CLAIMS_AND_EVIDENCE.md for benchmark methodology, corpus details, and measured results. Detection rates vary by language and CWE category.
Contributing
git clone https://github.com/mattybellx/Guardmarly.git
cd Guardmarly && pip install -e ".[dev]"
pytest tests/ -q # 1,183+ tests in ~12s
License
See LICENSE for terms. Guardmarly is source-available software.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file guardmarly-6.6.0.tar.gz.
File metadata
- Download URL: guardmarly-6.6.0.tar.gz
- Upload date:
- Size: 930.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
717a1fcf20331f6491ea725ce623ad9e03865737b5f26bb9ac44dffbb227dd70
|
|
| MD5 |
4af935969678e02bc36ff5f76636a411
|
|
| BLAKE2b-256 |
8ee8d2417ea7baa9fa71e588e9c3180ebcb6896f0d313545fece5c3b01ef7b85
|
Provenance
The following attestation bundles were made for guardmarly-6.6.0.tar.gz:
Publisher:
publish.yml on mattybellx/Guardmarly
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
guardmarly-6.6.0.tar.gz -
Subject digest:
717a1fcf20331f6491ea725ce623ad9e03865737b5f26bb9ac44dffbb227dd70 - Sigstore transparency entry: 2203139103
- Sigstore integration time:
-
Permalink:
mattybellx/Guardmarly@bca2924e91d5c44ca6276e41d3caad41924e7b9e -
Branch / Tag:
refs/tags/v6.6.0 - Owner: https://github.com/mattybellx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bca2924e91d5c44ca6276e41d3caad41924e7b9e -
Trigger Event:
push
-
Statement type:
File details
Details for the file guardmarly-6.6.0-py3-none-any.whl.
File metadata
- Download URL: guardmarly-6.6.0-py3-none-any.whl
- Upload date:
- Size: 936.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d63116a7f1b48380c66ef979cc0df7107107d9edafa452abc7680af8d68ec3fa
|
|
| MD5 |
a18932ce2f9b65f31d6c644cde9b43b0
|
|
| BLAKE2b-256 |
e6b5e1f3b1414ef490c2ada168b05929ab8d69fab02d5fd0945473121a7d56a0
|
Provenance
The following attestation bundles were made for guardmarly-6.6.0-py3-none-any.whl:
Publisher:
publish.yml on mattybellx/Guardmarly
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
guardmarly-6.6.0-py3-none-any.whl -
Subject digest:
d63116a7f1b48380c66ef979cc0df7107107d9edafa452abc7680af8d68ec3fa - Sigstore transparency entry: 2203139134
- Sigstore integration time:
-
Permalink:
mattybellx/Guardmarly@bca2924e91d5c44ca6276e41d3caad41924e7b9e -
Branch / Tag:
refs/tags/v6.6.0 - Owner: https://github.com/mattybellx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bca2924e91d5c44ca6276e41d3caad41924e7b9e -
Trigger Event:
push
-
Statement type: