coretrace-python-analyzer 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- coretrace_python_analyzer-0.1.0/.github/workflows/ci.yml +57 -0
- coretrace_python_analyzer-0.1.0/.github/workflows/release.yml +43 -0
- coretrace_python_analyzer-0.1.0/.gitignore +11 -0
- coretrace_python_analyzer-0.1.0/PKG-INFO +74 -0
- coretrace_python_analyzer-0.1.0/README.md +45 -0
- coretrace_python_analyzer-0.1.0/docs/architecture.md +1777 -0
- coretrace_python_analyzer-0.1.0/docs/plugins.md +228 -0
- coretrace_python_analyzer-0.1.0/docs/usage.md +322 -0
- coretrace_python_analyzer-0.1.0/examples/add.py +3 -0
- coretrace_python_analyzer-0.1.0/examples/canonical_symbols.py +5 -0
- coretrace_python_analyzer-0.1.0/pyproject.toml +67 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/__init__.py +4 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/__main__.py +4 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/abstract/__init__.py +45 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/abstract/constants.py +226 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/abstract/heap.py +252 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/abstract/ranges.py +285 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/abstract/values.py +56 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/analysis/__init__.py +31 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/analysis/manager.py +165 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/analysis/provider.py +73 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/dependency/dependency_policy/dependency_policy.py +46 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/dependency/dependency_policy/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/dependency/reachable_vulnerability/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/dependency/reachable_vulnerability/reachable_vulnerability.py +56 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/dependency/sample_advisories/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/dependency/sample_advisories/sample_advisories.py +109 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/dependency/vulnerable_dependency/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/dependency/vulnerable_dependency/vulnerable_dependency.py +43 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/cli/cli_models.py +35 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/cli/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/credentials/credential_models.py +43 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/credentials/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/django/django_models.py +123 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/django/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/fastapi/fastapi_models.py +29 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/fastapi/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/flask/flask_models.py +53 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/flask/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/http_clients/http_client_models.py +43 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/http_clients/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/python_stdlib/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/python_stdlib/python_stdlib.py +68 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/sqlalchemy/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/models/sqlalchemy/sqlalchemy_models.py +47 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/secrets/config_secrets/config_secrets.py +38 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/secrets/config_secrets/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/secrets/hardcoded_secrets/hardcoded_secrets.py +19 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/secrets/hardcoded_secrets/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/command_injection/command_injection.py +17 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/command_injection/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/insecure_deserialization/insecure_deserialization.py +17 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/insecure_deserialization/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/open_redirect/open_redirect.py +17 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/open_redirect/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/path_traversal/path_traversal.py +17 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/path_traversal/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/plaintext_credentials/plaintext_credentials.py +21 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/plaintext_credentials/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/sql_injection/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/sql_injection/sql_injection.py +17 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/ssrf/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/ssrf/ssrf.py +17 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/xss/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/security/xss/xss.py +17 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/syntax/dangerous_eval/dangerous_eval.py +19 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/syntax/dangerous_eval/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/syntax/flask_debug/flask_debug.py +63 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/syntax/flask_debug/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/syntax/missing_timeout/missing_timeout.py +51 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/syntax/missing_timeout/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/syntax/weak_crypto/plugin.toml +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/bundled/syntax/weak_crypto/weak_crypto.py +19 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/cache.py +310 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/cfg/__init__.py +46 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/cfg/builder.py +589 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/cfg/dominance.py +183 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/cfg/model.py +166 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/cli.py +216 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/dataflow/__init__.py +29 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/dataflow/lattice.py +78 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/dataflow/solver.py +96 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/dependency/__init__.py +44 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/dependency/advisories.py +168 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/dependency/correlation.py +87 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/dependency/graph.py +274 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/dependency/policy.py +65 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/dependency/sbom.py +65 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/engine.py +688 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/findings/__init__.py +13 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/findings/coverage.py +45 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/findings/model.py +49 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/findings/refutation.py +427 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/frontend/__init__.py +18 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/frontend/ast_adapter.py +447 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/frontend/parser.py +23 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/hir/__init__.py +5 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/hir/nodes.py +584 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/hir/visitors.py +36 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/interprocedural/__init__.py +49 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/interprocedural/callgraph.py +291 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/interprocedural/modulegraph.py +218 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/interprocedural/summaries.py +463 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/ir/__init__.py +5 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/ir/defuse.py +74 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/ir/lowering.py +575 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/ir/model.py +481 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/ir/printer.py +201 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/ir/ssa.py +277 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/plugins/__init__.py +58 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/plugins/api.py +153 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/plugins/detectors.py +114 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/plugins/loader.py +84 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/plugins/manifest.py +112 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/plugins/registry.py +34 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/plugins/secrets.py +330 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/reporters/__init__.py +22 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/reporters/json_format.py +48 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/reporters/report.py +23 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/reporters/sarif.py +70 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/reporters/text.py +24 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/semantic/__init__.py +9 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/semantic/identity.py +39 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/semantic/imports.py +131 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/semantic/scopes.py +473 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/semantic/symbols.py +87 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/source/__init__.py +13 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/source/manager.py +81 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/source/model.py +57 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/taint/__init__.py +55 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/taint/engine.py +800 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/taint/models.py +317 -0
- coretrace_python_analyzer-0.1.0/src/coretrace_python/taint/routes.py +99 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/Chatbot.json +22 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/DjangoGoat.json +58 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/Flask-Image-Editing-Website.json +52 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/InsecureGram.json +64 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/MiniBookApiServer.json +64 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/NPL-IA.json +16 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/Spam-Detection-Project.json +16 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/Vulnerable_fastapi.json +46 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/my_gdb.json +9 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/network-topologer.json +9 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/uploadbox-cloud-storage-solution.json +52 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/vulnerable-flask.json +64 -0
- coretrace_python_analyzer-0.1.0/tests/regression/expected/yt-fts.json +28 -0
- coretrace_python_analyzer-0.1.0/tests/regression/fixtures/vulnerable-flask/README.md +40 -0
- coretrace_python_analyzer-0.1.0/tests/regression/fixtures/vulnerable-flask/app.py +90 -0
- coretrace_python_analyzer-0.1.0/tests/regression/fixtures/vulnerable-flask/requirements.txt +2 -0
- coretrace_python_analyzer-0.1.0/tests/regression/fixtures/vulnerable-flask/vulnerable_services.py +33 -0
- coretrace_python_analyzer-0.1.0/tests/regression/repositories.toml +69 -0
- coretrace_python_analyzer-0.1.0/tests/test_advisory_feeds.py +362 -0
- coretrace_python_analyzer-0.1.0/tests/test_analysis_manager.py +375 -0
- coretrace_python_analyzer-0.1.0/tests/test_architecture.py +144 -0
- coretrace_python_analyzer-0.1.0/tests/test_audit_detectors.py +217 -0
- coretrace_python_analyzer-0.1.0/tests/test_cache.py +241 -0
- coretrace_python_analyzer-0.1.0/tests/test_cfg.py +385 -0
- coretrace_python_analyzer-0.1.0/tests/test_cli.py +110 -0
- coretrace_python_analyzer-0.1.0/tests/test_closures.py +188 -0
- coretrace_python_analyzer-0.1.0/tests/test_config_secrets_coverage.py +229 -0
- coretrace_python_analyzer-0.1.0/tests/test_constants.py +228 -0
- coretrace_python_analyzer-0.1.0/tests/test_correlation.py +220 -0
- coretrace_python_analyzer-0.1.0/tests/test_dataflow.py +221 -0
- coretrace_python_analyzer-0.1.0/tests/test_dependencies.py +345 -0
- coretrace_python_analyzer-0.1.0/tests/test_detectors.py +325 -0
- coretrace_python_analyzer-0.1.0/tests/test_discovery.py +118 -0
- coretrace_python_analyzer-0.1.0/tests/test_django_http_clients.py +303 -0
- coretrace_python_analyzer-0.1.0/tests/test_django_routes.py +231 -0
- coretrace_python_analyzer-0.1.0/tests/test_docs.py +99 -0
- coretrace_python_analyzer-0.1.0/tests/test_dominance.py +182 -0
- coretrace_python_analyzer-0.1.0/tests/test_emit_ir.py +315 -0
- coretrace_python_analyzer-0.1.0/tests/test_exceptions.py +331 -0
- coretrace_python_analyzer-0.1.0/tests/test_factories_match_loop_else.py +206 -0
- coretrace_python_analyzer-0.1.0/tests/test_fastapi_cli_precision.py +254 -0
- coretrace_python_analyzer-0.1.0/tests/test_frameworks.py +276 -0
- coretrace_python_analyzer-0.1.0/tests/test_heap.py +331 -0
- coretrace_python_analyzer-0.1.0/tests/test_hir_builder.py +221 -0
- coretrace_python_analyzer-0.1.0/tests/test_imports.py +123 -0
- coretrace_python_analyzer-0.1.0/tests/test_interprocedural.py +243 -0
- coretrace_python_analyzer-0.1.0/tests/test_interprocedural_taint.py +202 -0
- coretrace_python_analyzer-0.1.0/tests/test_ir.py +137 -0
- coretrace_python_analyzer-0.1.0/tests/test_match_patterns.py +153 -0
- coretrace_python_analyzer-0.1.0/tests/test_packaging.py +112 -0
- coretrace_python_analyzer-0.1.0/tests/test_parallel.py +254 -0
- coretrace_python_analyzer-0.1.0/tests/test_parser.py +14 -0
- coretrace_python_analyzer-0.1.0/tests/test_plaintext_credentials.py +188 -0
- coretrace_python_analyzer-0.1.0/tests/test_plugins.py +437 -0
- coretrace_python_analyzer-0.1.0/tests/test_project.py +269 -0
- coretrace_python_analyzer-0.1.0/tests/test_pyir_imports.py +143 -0
- coretrace_python_analyzer-0.1.0/tests/test_real_code_precision.py +183 -0
- coretrace_python_analyzer-0.1.0/tests/test_refutation.py +270 -0
- coretrace_python_analyzer-0.1.0/tests/test_refutation_evidence.py +337 -0
- coretrace_python_analyzer-0.1.0/tests/test_regression.py +122 -0
- coretrace_python_analyzer-0.1.0/tests/test_remaining_limits.py +168 -0
- coretrace_python_analyzer-0.1.0/tests/test_reporters.py +208 -0
- coretrace_python_analyzer-0.1.0/tests/test_scopes.py +370 -0
- coretrace_python_analyzer-0.1.0/tests/test_secrets_sbom.py +342 -0
- coretrace_python_analyzer-0.1.0/tests/test_self_state.py +162 -0
- coretrace_python_analyzer-0.1.0/tests/test_source_manager.py +88 -0
- coretrace_python_analyzer-0.1.0/tests/test_ssa.py +275 -0
- coretrace_python_analyzer-0.1.0/tests/test_symbol_resolution.py +212 -0
- coretrace_python_analyzer-0.1.0/tests/test_symbols.py +150 -0
- coretrace_python_analyzer-0.1.0/tests/test_syntax_control_flow.py +268 -0
- coretrace_python_analyzer-0.1.0/tests/test_syntax_coverage.py +307 -0
- coretrace_python_analyzer-0.1.0/tests/test_syntax_expressions.py +285 -0
- coretrace_python_analyzer-0.1.0/tests/test_taint.py +314 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
test:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
strategy:
|
|
11
|
+
matrix:
|
|
12
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
- uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: ${{ matrix.python-version }}
|
|
18
|
+
- run: python -m pip install -e ".[dev]"
|
|
19
|
+
- run: python -m mypy
|
|
20
|
+
- run: python -m ruff check .
|
|
21
|
+
- run: python -m pytest
|
|
22
|
+
|
|
23
|
+
regression:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
- uses: actions/setup-python@v5
|
|
28
|
+
with:
|
|
29
|
+
python-version: "3.12"
|
|
30
|
+
- uses: actions/cache@v4
|
|
31
|
+
with:
|
|
32
|
+
path: .regression
|
|
33
|
+
key: regression-${{ hashFiles('tests/regression/repositories.toml') }}
|
|
34
|
+
- run: python -m pip install -e ".[dev]"
|
|
35
|
+
- run: python -m pytest -m regression
|
|
36
|
+
|
|
37
|
+
package:
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
steps:
|
|
40
|
+
- uses: actions/checkout@v4
|
|
41
|
+
- uses: actions/setup-python@v5
|
|
42
|
+
with:
|
|
43
|
+
python-version: "3.12"
|
|
44
|
+
- run: python -m pip install build twine
|
|
45
|
+
- run: python -m build
|
|
46
|
+
- run: python -m twine check dist/*
|
|
47
|
+
- name: Install the wheel in a clean environment and run a check
|
|
48
|
+
run: |
|
|
49
|
+
python -m venv /tmp/smoke
|
|
50
|
+
/tmp/smoke/bin/pip install dist/*.whl
|
|
51
|
+
printf 'def run(code):\n eval(code)\n' > /tmp/sample.py
|
|
52
|
+
/tmp/smoke/bin/coretrace-python-analyzer --check /tmp/sample.py --format json > /tmp/report.json || test $? -eq 1
|
|
53
|
+
grep -q '"rule_id": "dangerous-eval"' /tmp/report.json
|
|
54
|
+
- uses: actions/upload-artifact@v4
|
|
55
|
+
with:
|
|
56
|
+
name: dist
|
|
57
|
+
path: dist/
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
# Publishes the package to PyPI when a version tag is pushed (``v0.1.0``). The tag must
|
|
4
|
+
# match the version in pyproject.toml. Publication uses PyPI trusted publishing: the
|
|
5
|
+
# ``pypi`` environment and the trusted publisher for this repository and workflow must be
|
|
6
|
+
# configured on pypi.org once; no token is stored.
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
tags: ["v*"]
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: "3.12"
|
|
20
|
+
- name: Check that the tag matches the package version
|
|
21
|
+
run: |
|
|
22
|
+
version=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")
|
|
23
|
+
test "v$version" = "${GITHUB_REF_NAME}"
|
|
24
|
+
- run: python -m pip install build twine
|
|
25
|
+
- run: python -m build
|
|
26
|
+
- run: python -m twine check dist/*
|
|
27
|
+
- uses: actions/upload-artifact@v4
|
|
28
|
+
with:
|
|
29
|
+
name: dist
|
|
30
|
+
path: dist/
|
|
31
|
+
|
|
32
|
+
publish:
|
|
33
|
+
needs: build
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
environment: pypi
|
|
36
|
+
permissions:
|
|
37
|
+
id-token: write
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/download-artifact@v4
|
|
40
|
+
with:
|
|
41
|
+
name: dist
|
|
42
|
+
path: dist/
|
|
43
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: coretrace-python-analyzer
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Static security analysis infrastructure for Python code
|
|
5
|
+
Project-URL: Homepage, https://github.com/CoreTrace/coretrace-python-analyzer
|
|
6
|
+
Project-URL: Repository, https://github.com/CoreTrace/coretrace-python-analyzer
|
|
7
|
+
Project-URL: Issues, https://github.com/CoreTrace/coretrace-python-analyzer/issues
|
|
8
|
+
Author: CoreTrace
|
|
9
|
+
License: Apache-2.0
|
|
10
|
+
Keywords: python,sast,security,static-analysis,taint
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Security
|
|
20
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
24
|
+
Requires-Dist: mypy>=1.15; extra == 'dev'
|
|
25
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
26
|
+
Requires-Dist: ruff>=0.9; extra == 'dev'
|
|
27
|
+
Requires-Dist: twine>=5.0; extra == 'dev'
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
# CoreTrace Python Analyzer
|
|
31
|
+
|
|
32
|
+
A standalone static security analyzer for Python. It finds injection vulnerabilities by
|
|
33
|
+
following attacker-controlled data through the program, across functions, files, objects
|
|
34
|
+
and closures, and judges each flow against the guards on its path; it reports dangerous
|
|
35
|
+
API usage, secrets committed in sources and configuration, and vulnerable or forbidden
|
|
36
|
+
dependencies, correlated with the code that reaches them. It runs offline, on a file or a
|
|
37
|
+
whole project, with no runtime dependency.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pip install coretrace-python-analyzer
|
|
41
|
+
coretrace-python-analyzer --check src/ --format sarif > report.sarif
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- [Usage guide](docs/usage.md): command line, rules, report formats, dependencies and
|
|
45
|
+
advisories, cache and parallelism, continuous integration.
|
|
46
|
+
- [Writing a plugin](docs/plugins.md): models for another framework, detectors for
|
|
47
|
+
another rule, secret patterns and project-wide checks.
|
|
48
|
+
- [Architecture](docs/architecture.md): the engine's design and its migration plan.
|
|
49
|
+
|
|
50
|
+
The pipeline: source manager, parser-independent high-level representation (PyHIR),
|
|
51
|
+
semantic resolution of imports and scopes, lowering to a small intermediate
|
|
52
|
+
representation (PyIR), control-flow graphs, SSA, data-flow and abstract interpretation,
|
|
53
|
+
interprocedural summaries, taint and refutation, then plugins and reporters.
|
|
54
|
+
|
|
55
|
+
## Development
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python -m venv .venv
|
|
59
|
+
python -m pip install -e ".[dev]"
|
|
60
|
+
python -m mypy
|
|
61
|
+
python -m pytest
|
|
62
|
+
python -m ruff check .
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The non-regression suite analyses the public repositories pinned in
|
|
66
|
+
[`tests/regression/repositories.toml`](tests/regression/repositories.toml) and compares
|
|
67
|
+
findings and coverage with the snapshots in `tests/regression/expected/`. It clones on
|
|
68
|
+
first use, needs the network and runs in its own CI job:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
python -m pytest -m regression
|
|
72
|
+
CORETRACE_REGRESSION_UPDATE=1 python -m pytest -m regression # record an intended change
|
|
73
|
+
```
|
|
74
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# CoreTrace Python Analyzer
|
|
2
|
+
|
|
3
|
+
A standalone static security analyzer for Python. It finds injection vulnerabilities by
|
|
4
|
+
following attacker-controlled data through the program, across functions, files, objects
|
|
5
|
+
and closures, and judges each flow against the guards on its path; it reports dangerous
|
|
6
|
+
API usage, secrets committed in sources and configuration, and vulnerable or forbidden
|
|
7
|
+
dependencies, correlated with the code that reaches them. It runs offline, on a file or a
|
|
8
|
+
whole project, with no runtime dependency.
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pip install coretrace-python-analyzer
|
|
12
|
+
coretrace-python-analyzer --check src/ --format sarif > report.sarif
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- [Usage guide](docs/usage.md): command line, rules, report formats, dependencies and
|
|
16
|
+
advisories, cache and parallelism, continuous integration.
|
|
17
|
+
- [Writing a plugin](docs/plugins.md): models for another framework, detectors for
|
|
18
|
+
another rule, secret patterns and project-wide checks.
|
|
19
|
+
- [Architecture](docs/architecture.md): the engine's design and its migration plan.
|
|
20
|
+
|
|
21
|
+
The pipeline: source manager, parser-independent high-level representation (PyHIR),
|
|
22
|
+
semantic resolution of imports and scopes, lowering to a small intermediate
|
|
23
|
+
representation (PyIR), control-flow graphs, SSA, data-flow and abstract interpretation,
|
|
24
|
+
interprocedural summaries, taint and refutation, then plugins and reporters.
|
|
25
|
+
|
|
26
|
+
## Development
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
python -m venv .venv
|
|
30
|
+
python -m pip install -e ".[dev]"
|
|
31
|
+
python -m mypy
|
|
32
|
+
python -m pytest
|
|
33
|
+
python -m ruff check .
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The non-regression suite analyses the public repositories pinned in
|
|
37
|
+
[`tests/regression/repositories.toml`](tests/regression/repositories.toml) and compares
|
|
38
|
+
findings and coverage with the snapshots in `tests/regression/expected/`. It clones on
|
|
39
|
+
first use, needs the network and runs in its own CI job:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
python -m pytest -m regression
|
|
43
|
+
CORETRACE_REGRESSION_UPDATE=1 python -m pytest -m regression # record an intended change
|
|
44
|
+
```
|
|
45
|
+
|