SecScanPY — лёгкий статический анализатор безопасности Python-проектов 🛡️🔎
Кратко:
SecScanPY — автономный инструмент (GUI + CLI) для быстрого статического анализа Python-проектов и текстовых конфигов. Ищет возможные утечки секретов (ключи, пароли, JWT и т.п.) и рискованные конструкции/вызовы (например, pickle.loads, yaml.load без SafeLoader, subprocess.run(..., shell=True), requests(..., verify=False)). Работает без внешних зависимостей — только стандартная библиотека Python.
- Ищет хардкод-секреты и токены в .py, .env, .json, .yml/.yaml, .ini, .cfg, .txt.
- Проводит AST-анализ Python-файлов (импорты, вызовы функций, аргументы) и находит рискованные вызовы.
- Классифицирует находки по уровням риска: HIGH / MEDIUM / LOW / INFO.
- Отображает результаты в GUI (Tkinter) с подсветкой и позволяет сохранить JSON-отчёт.
- В комплекте — генератор демо-проекта с уязвимыми примерами для теста.
- Python 3.7+ (рекомендуется 3.8+).
- Никаких внешних пакетов — используется только стандартная библиотека.
python main.py --cli /путь/к/проекту --show-snippet --max-bytes 1048576 --out report.json
- Запустите python main.py.
- Нажмите Выбрать… и укажите папку проекта или отдельный файл.
- Включите/выключите Показывать сниппеты, при необходимости поменяйте лимит размера файла.
- Нажмите Сканировать — результаты появятся в окне.
- При желании — Сохранить отчёт (JSON).
- Кнопка Сделать демо-проект создаст demo_secscan/ с примером уязвимого кода.
Отчёт включает:
- scanned_root — путь, который просканирован;
- files_count — количество обработанных файлов;
- findings_count — количество найденных проблем;
- summary — подсчёт по уровням риска;
- findings — массив объектов: { file, line, col, rule_id, severity, message, snippet }.
Пример записи в findings:
{
"file": "demo_secscan/vuln_example.py",
"line": 10,
"col": 4,
"rule_id": "CALL:subprocess.run",
"severity": "HIGH",
"message": "subprocess.run с shell=True повышает риск командной инъекции",
"snippet": "subprocess.run(cmd, shell=True)"
}
🧩 Что проверяется (ключевые правила)
- Регулярные выражения для поиска приватных ключей, API-ключей (AWS/GCP), slack-токенов, JWT, хардкод-паролей.
- Рискованные импорты: subprocess, pickle, yaml, urllib3, hashlib и др.
- Опасные вызовы: pickle.load(s), yaml.load(...) без Loader, subprocess.run(..., shell=True), requests(..., verify=False), urllib3.disable_warnings().
🔒 Почему это важно (коротко)
Небезопасная десериализация (pickle), загрузка YAML без safe_load, выполнение команд через shell и отключение проверок TLS — всё это распространённые источники уязвимостей (RCE, командные инъекции, MITM, утечки секретов). SecScan помогает быстро найти такие проблемные места в кодовой базе.
GUI содержит кнопку Сделать демо-проект — создаётся папка demo_secscan/ с:
- vuln_example.py (пример небезопасных вызовов и хардкод-секретов),
- .env, config.yml (фейковые токены).
Используйте его для проверки и демонстрации.
⚠️ Ограничения и предупреждение
- SecScanPY выполняет статический анализ — все находки нужно проверять вручную.
- Инструмент предназначен для образовательных и аудиторских целей. Не используйте его против чужих систем без разрешения.
SecScanPY — Lightweight Static Security Scanner for Python Projects 🛡️🔎
Short description:
SecScanPY is a small standalone tool (GUI + CLI) for quick static security scanning of Python projects and text configs. It detects possible secret leaks (keys, passwords, JWTs, etc.) and risky constructs/calls (e.g., pickle.loads, yaml.load without SafeLoader, subprocess.run(..., shell=True), requests(..., verify=False)). Runs with Python standard library only — no third-party dependencies required.
- Detects hardcoded secrets and tokens in .py, .env, .json, .yml/.yaml, .ini, .cfg, .txt.
- Performs AST analysis of Python files (imports, function calls, kwargs) to identify contextual risks.
- Categorizes findings by severity: HIGH / MEDIUM / LOW / INFO.
- GUI (Tkinter) with colorized output and JSON report export.
- Built-in demo generator with sample vulnerable code.
- Python 3.7+ (3.8+ recommended).
- No external packages.
python main.py --cli /path/to/project --show-snippet --max-bytes 1048576 --out report.json
- Start python main.py.
- Click Choose… and select a folder or a file.
- Toggle Show snippets and adjust file size limit if needed.
- Click Scan — results will appear in the window.
- Optionally Save report (JSON).
- Use Create demo project to generate demo_secscan/ with vulnerable examples.
Report contains:
- scanned_root — scanned path;
- files_count — number of scanned files;
- findings_count — total findings;
- summary — counts per severity;
- findings — array of { file, line, col, rule_id, severity, message, snippet }.
Example:
{
"file": "demo_secscan/vuln_example.py",
"line": 10,
"col": 4,
"rule_id": "CALL:subprocess.run",
"severity": "HIGH",
"message": "subprocess.run with shell=True increases risk of command injection",
"snippet": "subprocess.run(cmd, shell=True)"
}
🔍 What is scanned (high level)
- Regex patterns for private keys, API keys (AWS/GCP), Slack tokens, JWTs, hardcoded passwords.
- Risky imports: subprocess, pickle, yaml, urllib3, hashlib, etc.
- Dangerous calls: pickle.load(s), yaml.load(...) without Loader, subprocess.run(..., shell=True), requests(..., verify=False), urllib3.disable_warnings().
Unsafe deserialization (pickle), YAML loading without safe_load, executing shell commands with user input, and disabling TLS verification are common sources of vulnerabilities (RCE, command injection, MITM, secret leakage). SecScan provides a quick way to detect such spots in codebases.
The GUI includes Create demo project — generates demo_secscan/ with:
- vuln_example.py (unsafe calls and hardcoded secrets),
- .env, config.yml (fake tokens).
Use it to test and demonstrate functionality.
⚠️ Limitations & Disclaimer
- SecScan is a static analysis helper — findings are potential issues and must be manually validated.
- Intended for educational and auditing use. Do not use it against systems you do not have permission to test.