Кратко:
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.pypython 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 выполняет статический анализ — все находки нужно проверять вручную.
- Инструмент предназначен для образовательных и аудиторских целей. Не используйте его против чужих систем без разрешения.
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.pypython 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)"
}- 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.
- 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.