MalDet · Static Security Report
24 findings likely need attention, 30 look like noise. Most notable: Found 'importlib.resources', which is a module only available on Python 3.7+. This does... (99% confidence).
Generated from finding counts. A plain-English summary was not available for this scan.
MalDet scores two different questions separately, because they call for different responses: code can be badly written without being hostile, and hostile code is not always badly written.
| Detector | Looks for | High | Medium | Low | Total |
|---|---|---|---|---|---|
| bandit | Insecure coding patterns in Python source | 0 | 1 | 25 | 26 |
| semgrep | Insecure coding patterns across many languages | 5 | 8 | 0 | 13 |
| dep_checker | Vulnerable, unpinned or typosquatted dependencies | 10 | 0 | 3 | 13 |
| guarddog | Malicious package and install-time behaviour | 0 | 0 | 2 | 2 |
24 of 54 findings were rated more likely genuine than noise by the classifier.
Identical findings are grouped, so a single rule firing many times takes one row. Ordered worst first. “Seen” is how many times that finding occurred.
| Severity | Detector | Finding | Seen | Example location |
|---|---|---|---|---|
| high | semgrep | Found 'importlib.resources', which is a module only available on Python 3.7+. This does not work in lower versions, and therefore is not backwards compatible. Use importlib_resources instead for older Python versions. | 1 | /src/seclab_taskflow_agent/available_tools.py:14 |
| high | semgrep | the `encoding` argument to Popen is only available on Python 3.6+ | 1 | /src/seclab_taskflow_agent/shell_utils.py:22 |
| high | dep_checker | CVE found: GHSA-7xgj-8392-5q4r in fastmcp==3.2.0 — ## Maintainer assessment and remediation This report is accepted as a FastMCP authorization vulnera | 1 | pyproject.toml |
| high | dep_checker | CVE found: CVE-2026-96760 in authlib==1.6.12 — Authlib (prior to 1.9.0) contains a signature verification bypass vulnerability. The JsonWebSignatur | 1 | pyproject.toml |
| high | dep_checker | CVE found: CVE-2026-114605 in dnspython==2.8.0 — ### Impact A maliciously crafted DNS message may cause dns.name.from_wire_parser() to use excessive | 1 | pyproject.toml |
| high | dep_checker | CVE found: CVE-2026-114615 in authlib==1.6.12 — ## Summary `OctKey.import_key()` carries the only guard that stops an asymmetric public key from be | 1 | pyproject.toml |
| high | dep_checker | CVE found: CVE-2026-114616 in authlib==1.6.12 — Reporter: Cavan Loughran, Celvex Group Inc. Summary Authlib's symmetric (oct) key handling accepts | 1 | pyproject.toml |
| high | dep_checker | CVE found: CVE-2026-114618 in authlib==1.6.12 — ## Description ### Summary Authlib's default RFC 7523 JWT bearer grant leaves `get_audiences()` em | 1 | pyproject.toml |
| high | dep_checker | CVE found: CVE-2026-114614 in authlib==1.6.12 — ### Summary `authlib.common.security.is_secure_transport()` is used throughout Authlib to enforce th | 1 | pyproject.toml |
| high | dep_checker | CVE found: PYSEC-2026-4320 in certifi==2025.6.15 — Certifi versions before 2026.10.18 include the `emSign ECC Root CA - G3` root certificate in their b | 1 | pyproject.toml |
| high | dep_checker | CVE found: CVE-2026-114620 in authlib==1.6.12 — ### Summary Authlib's RFC 9101 (JAR) extension passes the attacker-controlled `request_uri` authori | 1 | pyproject.toml |
| high | dep_checker | CVE found: CVE-2026-114617 in authlib==1.6.12 — ### Summary `OpenIDMixin.parse_id_token()` reads the `nonce_supported` claim from the ID token it i | 1 | pyproject.toml |
| high | semgrep | Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use | 2 | /.github/workflows/release.yml:52 |
| high | semgrep | By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'. | 1 | /docker/Dockerfile:48 |
| medium | semgrep | Detected a python logger call with a potential hardcoded secret "token usage model=%s input=%d output=%d " "cache_write=%d cache_read=%d" being logged. This may lead to secret credentials being exposed. Make sure that the logger is not logging sensitive information. | 1 | /src/seclab_taskflow_agent/_stream.py:134 |
| medium | semgrep | GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: ac | 7 | /.github/workflows/codeql.yml:42 |
| medium | bandit | Probable insecure usage of temp file/directory. | 1 | /release_tools/publish_docker.py:31 |
| low | guarddog | Detects reading of environment variables (credential access, often contains secrets) [threat-runtime-environment-read] | 2 | /src/seclab_taskflow_agent/capi.py:176 |
| low | bandit | Consider possible security implications associated with the subprocess module. | 5 | /src/seclab_taskflow_agent/shell_utils.py:7 |
| low | bandit | Starting a process with a partial executable path | 8 | /release_tools/copy_files.py:53 |
| low | bandit | subprocess call - check for execution of untrusted input. | 12 | /release_tools/copy_files.py:51 |
| low | dep_checker | Loose version constraint: 'Jinja2>=3.1.0' — attacker could push malicious update | 1 | pyproject.toml |
| low | dep_checker | Loose version constraint: 'anthropic>=0.50,<1' — attacker could push malicious update | 1 | pyproject.toml |
| low | dep_checker | Loose version constraint: 'github-copilot-sdk>=0.2.2,<0.3' — attacker could push malicious update | 1 | pyproject.toml |