Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/ivangrynenko/cursorrulesWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/rules/ivangrynenko/cursorrules/python-vulnerable-outdated-components)<a href="https://agentmods.dev/rules/ivangrynenko/cursorrules/python-vulnerable-outdated-components"><img src="https://agentmods.dev/badge/rules/ivangrynenko/cursorrules/python-vulnerable-outdated-components/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/rules/ivangrynenko/cursorrules/python-vulnerable-outdated-components"><img src="https://agentmods.dev/badge/rules/ivangrynenko/cursorrules/python-vulnerable-outdated-components.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.02880 |
| Opus 5.5 | $0.00000 | $0.01152 |
| Sonnet 5.5 | $0.00000 | $0.00576 |
| Haiku 4.5 | $0.00000 | $0.00288 |
Grade A, and why
python-vulnerable-outdated-components scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
- pattern: "from\\s+xml\\.etree\\.ElementTree\\s+import\\s+.*parse|from\\s+urllib2\\s+import|from\\s+urllib\\s+import\\s+urlopen|import\\s+cgi|import\\s+imp" Copies of this mod
1 near-identical copy found in the catalogue:
- python-vulnerable-outdated-components — 100% identical, 0 lines differ
How it starts
The opening of the file, as written. The whole thing — 251 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Python Vulnerable and Outdated Components Standards (OWASP A06:2021)
This rule enforces security best practices to prevent vulnerabilities related to outdated dependencies and components in Python applications, as defined in OWASP Top 10:2021-A06.
actions:
-
type: enforce conditions:
Pattern 1: Unpinned dependencies in requirements files
- pattern: "^(django|flask|fastapi|requests|cryptography|pyyaml|sqlalchemy|celery|numpy|pandas|pillow|tensorflow|torch|boto3|psycopg2)\s*$" file_pattern: "requirements.*\.txt$|setup\.py$|pyproject\.toml$" message: "Unpinned dependency detected. Always pin dependencies to specific versions to prevent automatic updates to potentially vulnerable versions."
Pattern 2: Outdated/vulnerable Django versions
- pattern: "django([<>=]=|~=|==)\s*["']?(1\.|2\.[0-2]\.|3\.[0-2]\.|4\.0\.)[0-9]+["']?" message: "Potentially outdated Django version detected. Consider upgrading to the latest stable version with security updates."
Pattern 3: Outdated/vulnerable Flask versions
- pattern: "flask([<>=]=|~=|==)\s*["']?(0\.|1\.[0-3]\.|2\.0\.[0-3])[0-9]*["']?" message: "Potentially outdated Flask version detected. Consider upgrading to the latest stable version with security updates."
Pattern 4: Outdated/vulnerable Requests versions
- pattern: "requests([<>=]=|~=|==)\s*["']?(0\.|1\.|2\.[0-2][0-5]\.[0-9]+)["']?" message: "Potentially outdated Requests version detected. Consider upgrading to the latest stable version with security updates."
Pattern 5: Outdated/vulnerable Cryptography versions
- pattern: "cryptography([<>=]=|~=|==)\s*["']?(0\.|1\.|2\.|3\.[0-3]\.|3\.4\.[0-7])[0-9]*["']?" message: "Potentially outdated Cryptography version detected. Consider upgrading to the latest stable version with security updates."
Pattern 6: Outdated/vulnerable PyYAML versions
- pattern: "pyyaml([<>=]=|~=|==)\s*["']?(0\.|1\.|2\.|3\.|4\.|5\.[0-5]\.[0-9]+)["']?" message: "Potentially outdated PyYAML version detected. Consider upgrading to the latest stable version with security updates."
Pattern 7: Outdated/vulnerable Pillow versions
- pattern: "pillow([<>=]=|~=|==)\s*["']?(0\.|1\.|2\.|3\.|4\.|5\.|6\.|7\.|8\.[0-3]\.[0-9]+)["']?" message: "Potentially outdated Pillow version detected. Consider upgrading to the latest stable version with security updates."
Pattern 8: Direct imports of deprecated modules
- pattern: "from\s+xml\.etree\.ElementTree\s+import\s+.*parse|from\s+urllib2\s+import|from\s+urllib\s+import\s+urlopen|import\s+cgi|import\s+imp" message: "Use of deprecated or insecure module detected. Consider using more secure alternatives."
Pattern 9: Use of deprecated functions
- pattern: "\.set_password\([^)]*\)|hashlib\.md5\(|hashlib\.sha1\(|random\.random\(|random\.randrange\(|random\.randint\(" message: "Use of deprecated or insecure function detected. Consider using more secure alternatives."
Pattern 10: Insecure dependency loading
- pattern: "import\(|importlib\.import_module\(|exec\(|eval\(" message: "Dynamic code execution or module loading detected. This can lead to code injection if user input is involved."
Pattern 11: Outdated TLS/SSL versions
- pattern: "ssl\.PROTOCOL_TLSv1|ssl\.PROTOCOL_TLSv1_1|ssl\.PROTOCOL_SSLv2|ssl\.PROTOCOL_SSLv3|ssl\.PROTOCOL_TLSv1_2" message: "Outdated TLS/SSL protocol version detected. Use ssl.PROTOCOL_TLS_CLIENT or ssl.PROTOCOL_TLS_SERVER instead."
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 251 lines · 2,880 tokens per session scan A ba8ce975a780
python-vulnerable-outdated-components is a cursor rule published in the GitHub repository ivangrynenko/cursorrules (88 stars, last pushed 11mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 2,880 tokens. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other cursor rules, from other repositories
django
Django: models, views, ORM best practices.
python
Python best practices: type hints, pathlib, pytest, clean error handling.
pydantic
Pydantic: BaseModel, validators, Field, Settings.
pytest
You are an expert in pytest testing. Follow these rules.
pytorch
PyTorch: neural networks, model training, GPU optimization.
ruff
Ruff: linting, formatting, rule selection, configuration.