← Legacy view v2 (rp.*)

open-llm-vtuber/open-llm-vtuber

https://github.com/Open-LLM-VTuber/Open-LLM-VTuber · lang: python · LOC: · source: user_submitted

Quality
46.7
Grade D+
Security
Findings
143
14 critical · 72 high
Status
completed
Jun 4, 2026 03:23
high: 72 medium: 25 info: 24 critical: 14 low: 8
Top rules by occurrence
RuleSeverityCount
MINED108 self.attribute used but never assigned in __init__ high 25
MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) high 21
MINED018 Unsafe Deserialization Pickle critical 4
MINED111 Bare except continues silently medium 4
MINED050 Stub Only Function info 4
MINED001 Bare Except Pass high 4
SEC079 Python: yaml.load without SafeLoader critical 4
SEC116 Ruby YAML.load / Marshal.load on untrusted input critical 4
MINED067 Python Requests No Timeout info 4
MINED040 Python Yaml Load Unsafe high 4
First 143 findings (severity-sorted)
critical MINED018 Unsafe Deserialization Pickle CWE-502
upgrade_codes/compare_yaml.py:80 · conf 1.00
[MINED018] Unsafe Deserialization Pickle: pickle.loads / yaml.load (without Loader=SafeLoader) / unmarshal of network/file data — RCE.
critical MINED018 Unsafe Deserialization Pickle CWE-502
upgrade_codes/config_sync.py:121 · conf 1.00
[MINED018] Unsafe Deserialization Pickle: pickle.loads / yaml.load (without Loader=SafeLoader) / unmarshal of network/file data — RCE.
critical MINED018 Unsafe Deserialization Pickle CWE-502
upgrade_codes/upgrade_core/comment_diff_fn.py:23 · conf 1.00
[MINED018] Unsafe Deserialization Pickle: pickle.loads / yaml.load (without Loader=SafeLoader) / unmarshal of network/file data — RCE.
critical MINED107 Missing Python import (NameError at runtime) CWE-1075
scripts/run_bilibili_live.py:44 · conf 1.00
[MINED107] Missing import: `platform` used but not imported: The file uses `platform.something(...)` but never imports `platform`. This raises NameError at runtime the first time the line executes.
critical MINED116 GHA pull_request workflow leaks secrets to forks CWE-829
.github/workflows/docker-blacksmith.yml:91 · conf 0.90
[MINED116] Workflow uses `secrets.DOCKERHUB_USERNAME` on a `pull_request` trigger: This workflow triggers on `pull_request`, which checks out the FORK's code. Referencing `${ secrets.DOCKERHUB_USERNA…
critical MINED116 GHA pull_request workflow leaks secrets to forks CWE-829
.github/workflows/docker-blacksmith.yml:92 · conf 0.90
[MINED116] Workflow uses `secrets.DOCKERHUB_TOKEN` on a `pull_request` trigger: This workflow triggers on `pull_request`, which checks out the FORK's code. Referencing `${ secrets.DOCKERHUB_TOKEN }` …
critical MINED116 GHA pull_request workflow leaks secrets to forks CWE-829
.github/workflows/docker-blacksmith.yml:157 · conf 0.90
[MINED116] Workflow uses `secrets.DOCKERHUB_USERNAME` on a `pull_request` trigger: This workflow triggers on `pull_request`, which checks out the FORK's code. Referencing `${ secrets.DOCKERHUB_USERNA…
critical MINED116 GHA pull_request workflow leaks secrets to forks CWE-829
.github/workflows/docker-blacksmith.yml:158 · conf 0.90
[MINED116] Workflow uses `secrets.DOCKERHUB_TOKEN` on a `pull_request` trigger: This workflow triggers on `pull_request`, which checks out the FORK's code. Referencing `${ secrets.DOCKERHUB_TOKEN }` …
critical SEC079 Python: yaml.load without SafeLoader
upgrade_codes/compare_yaml.py:80 · conf 1.00
[SEC079] Python: yaml.load without SafeLoader: yaml.load() without explicit SafeLoader can execute arbitrary Python objects (CVE-2017-18342). Ported from bandit B506 / dlint DUO109 (Apache-2.0 / BSD-…
critical SEC079 Python: yaml.load without SafeLoader
upgrade_codes/config_sync.py:121 · conf 1.00
[SEC079] Python: yaml.load without SafeLoader: yaml.load() without explicit SafeLoader can execute arbitrary Python objects (CVE-2017-18342). Ported from bandit B506 / dlint DUO109 (Apache-2.0 / BSD-…
critical SEC079 Python: yaml.load without SafeLoader
upgrade_codes/upgrade_core/comment_diff_fn.py:23 · conf 1.00
[SEC079] Python: yaml.load without SafeLoader: yaml.load() without explicit SafeLoader can execute arbitrary Python objects (CVE-2017-18342). Ported from bandit B506 / dlint DUO109 (Apache-2.0 / BSD-…
critical SEC116 Ruby YAML.load / Marshal.load on untrusted input
upgrade_codes/compare_yaml.py:80 · conf 1.00
[SEC116] Ruby YAML.load / Marshal.load on untrusted input: `YAML.load` (pre-3.1) and `Marshal.load` instantiate arbitrary Ruby classes — direct RCE on untrusted input. `unsafe_load` is even more dang…
critical SEC116 Ruby YAML.load / Marshal.load on untrusted input
upgrade_codes/config_sync.py:121 · conf 1.00
[SEC116] Ruby YAML.load / Marshal.load on untrusted input: `YAML.load` (pre-3.1) and `Marshal.load` instantiate arbitrary Ruby classes — direct RCE on untrusted input. `unsafe_load` is even more dang…
critical SEC116 Ruby YAML.load / Marshal.load on untrusted input
upgrade_codes/upgrade_core/comment_diff_fn.py:23 · conf 1.00
[SEC116] Ruby YAML.load / Marshal.load on untrusted input: `YAML.load` (pre-3.1) and `Marshal.load` instantiate arbitrary Ruby classes — direct RCE on untrusted input. `unsafe_load` is even more dang…
high AGT002 LLM memory extraction can be prompt-injected into storing fake facts
src/open_llm_vtuber/agent/agents/basic_memory_agent.py:286 · conf 0.82
LLM memory extraction can be prompt-injected into storing fake facts
high CORE_NO_TESTS No test files found
No test files found
high MINED001 Bare Except Pass CWE-755
prompts/prompt_loader.py:49 · conf 1.00
[MINED001] Bare Except Pass: except: pass or except Exception: pass — silently swallows everything including KeyboardInterrupt and bugs.
high MINED001 Bare Except Pass CWE-755
src/open_llm_vtuber/live2d_model.py:77 · conf 1.00
[MINED001] Bare Except Pass: except: pass or except Exception: pass — silently swallows everything including KeyboardInterrupt and bugs.
high MINED001 Bare Except Pass CWE-755
src/open_llm_vtuber/proxy_handler.py:172 · conf 1.00
[MINED001] Bare Except Pass: except: pass or except Exception: pass — silently swallows everything including KeyboardInterrupt and bugs.
high MINED006 Overcatch Baseexception CWE-705
scripts/run_bilibili_live.py:59 · conf 1.00
[MINED006] Overcatch Baseexception: except BaseException: ... — prevents Ctrl+C and SystemExit from working.
high MINED020 Logging Credential Via Fstring CWE-532
src/open_llm_vtuber/tts/fish_api_tts.py:36 · conf 1.00
[MINED020] Logging Credential Via Fstring: logger.error(f"failed for {api_key}") — secrets end up in log aggregators / sentry.
high MINED034 Python Subprocess Shell True CWE-78
src/open_llm_vtuber/utils/install_utils.py:116 · conf 1.00
[MINED034] Python Subprocess Shell True: subprocess(..., shell=True) enables command injection.
high MINED034 Python Subprocess Shell True CWE-78
upgrade_codes/upgrade_core/upgrade_utils.py:20 · conf 1.00
[MINED034] Python Subprocess Shell True: subprocess(..., shell=True) enables command injection.
high MINED040 Python Yaml Load Unsafe CWE-502
upgrade_codes/compare_yaml.py:80 · conf 1.00
[MINED040] Python Yaml Load Unsafe: yaml.load(stream) without SafeLoader can deserialize arbitrary classes.
high MINED040 Python Yaml Load Unsafe CWE-502
upgrade_codes/config_sync.py:121 · conf 1.00
[MINED040] Python Yaml Load Unsafe: yaml.load(stream) without SafeLoader can deserialize arbitrary classes.
high MINED040 Python Yaml Load Unsafe CWE-502
upgrade_codes/upgrade_core/comment_diff_fn.py:23 · conf 1.00
[MINED040] Python Yaml Load Unsafe: yaml.load(stream) without SafeLoader can deserialize arbitrary classes.
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:50 · conf 1.00
[MINED108] `self.backup_user_config` used but never assigned in __init__: Method `sync_user_config` of class `ConfigSynchronizer` reads `self.backup_user_config`, but no assignment to it exists in __…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:61 · conf 1.00
[MINED108] `self.compare_field_keys` used but never assigned in __init__: Method `update_user_config` of class `ConfigSynchronizer` reads `self.compare_field_keys`, but no assignment to it exists in …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:62 · conf 1.00
[MINED108] `self.merge_and_update_user_config` used but never assigned in __init__: Method `update_user_config` of class `ConfigSynchronizer` reads `self.merge_and_update_user_config`, but no assignm…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:67 · conf 1.00
[MINED108] `self.compare_comments` used but never assigned in __init__: Method `update_user_config` of class `ConfigSynchronizer` reads `self.compare_comments`, but no assignment to it exists in __in…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:80 · conf 1.00
[MINED108] `self.get_latest_version` used but never assigned in __init__: Method `update_user_config` of class `ConfigSynchronizer` reads `self.get_latest_version`, but no assignment to it exists in …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:81 · conf 1.00
[MINED108] `self.get_old_version` used but never assigned in __init__: Method `update_user_config` of class `ConfigSynchronizer` reads `self.get_old_version`, but no assignment to it exists in __init…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:110 · conf 1.00
[MINED108] `self.merge_configs` used but never assigned in __init__: Method `merge_and_update_user_config` of class `ConfigSynchronizer` reads `self.merge_configs`, but no assignment to it exists in …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:156 · conf 1.00
[MINED108] `self.collect_all_subkeys` used but never assigned in __init__: Method `collect_all_subkeys` of class `ConfigSynchronizer` reads `self.collect_all_subkeys`, but no assignment to it exists …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:171 · conf 1.00
[MINED108] `self.get_missing_keys` used but never assigned in __init__: Method `get_missing_keys` of class `ConfigSynchronizer` reads `self.get_missing_keys`, but no assignment to it exists in __init…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:174 · conf 1.00
[MINED108] `self.collect_all_subkeys` used but never assigned in __init__: Method `get_missing_keys` of class `ConfigSynchronizer` reads `self.collect_all_subkeys`, but no assignment to it exists in …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:188 · conf 1.00
[MINED108] `self.collect_all_subkeys` used but never assigned in __init__: Method `get_extra_keys` of class `ConfigSynchronizer` reads `self.collect_all_subkeys`, but no assignment to it exists in __…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:195 · conf 1.00
[MINED108] `self.get_extra_keys` used but never assigned in __init__: Method `get_extra_keys` of class `ConfigSynchronizer` reads `self.get_extra_keys`, but no assignment to it exists in __init__ (an…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:198 · conf 1.00
[MINED108] `self.collect_all_subkeys` used but never assigned in __init__: Method `get_extra_keys` of class `ConfigSynchronizer` reads `self.collect_all_subkeys`, but no assignment to it exists in __…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:209 · conf 1.00
[MINED108] `self.get_extra_keys` used but never assigned in __init__: Method `delete_extra_keys` of class `ConfigSynchronizer` reads `self.get_extra_keys`, but no assignment to it exists in __init__ …
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:243 · conf 1.00
[MINED108] `self.get_missing_keys` used but never assigned in __init__: Method `compare_field_keys` of class `ConfigSynchronizer` reads `self.get_missing_keys`, but no assignment to it exists in __in…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:244 · conf 1.00
[MINED108] `self.get_extra_keys` used but never assigned in __init__: Method `compare_field_keys` of class `ConfigSynchronizer` reads `self.get_extra_keys`, but no assignment to it exists in __init__…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/config_sync.py:254 · conf 1.00
[MINED108] `self.delete_extra_keys` used but never assigned in __init__: Method `compare_field_keys` of class `ConfigSynchronizer` reads `self.delete_extra_keys`, but no assignment to it exists in __…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/from_version/v_1_1_1.py:44 · conf 1.00
[MINED108] `self._upgrade_live2d_models` used but never assigned in __init__: Method `upgrade` of class `to_v_1_2_1` reads `self._upgrade_live2d_models`, but no assignment to it exists in __init__ (a…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/from_version/v_1_1_1.py:45 · conf 1.00
[MINED108] `self._upgrade_conf_yaml` used but never assigned in __init__: Method `upgrade` of class `to_v_1_2_1` reads `self._upgrade_conf_yaml`, but no assignment to it exists in __init__ (and no cl…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/from_version/v_1_1_1.py:93 · conf 1.00
[MINED108] `self._migrate_field` used but never assigned in __init__: Method `_upgrade_conf_yaml` of class `to_v_1_2_1` reads `self._migrate_field`, but no assignment to it exists in __init__ (and no…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/upgrade_core/upgrade_utils.py:62 · conf 1.00
[MINED108] `self.run_command` used but never assigned in __init__: Method `log_system_info` of class `UpgradeUtility` reads `self.run_command`, but no assignment to it exists in __init__ (and no clas…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/upgrade_core/upgrade_utils.py:69 · conf 1.00
[MINED108] `self.run_command` used but never assigned in __init__: Method `log_system_info` of class `UpgradeUtility` reads `self.run_command`, but no assignment to it exists in __init__ (and no clas…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/upgrade_core/upgrade_utils.py:86 · conf 1.00
[MINED108] `self.run_command` used but never assigned in __init__: Method `get_submodule_list` of class `UpgradeUtility` reads `self.run_command`, but no assignment to it exists in __init__ (and no c…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/version_manager.py:46 · conf 1.00
[MINED108] `self.get_upgrade_mapping` used but never assigned in __init__: Method `resolve_upgrade_task` of class `VersionUpgradeManager` reads `self.get_upgrade_mapping`, but no assignment to it exi…
high MINED108 self.attribute used but never assigned in __init__ CWE-476
upgrade_codes/version_manager.py:58 · conf 1.00
[MINED108] `self.resolve_upgrade_task` used but never assigned in __init__: Method `upgrade` of class `VersionUpgradeManager` reads `self.resolve_upgrade_task`, but no assignment to it exists in __in…
high MINED110 Blocking call inside async function CWE-833
src/open_llm_vtuber/agent/stateless_llm/stateless_llm_with_template.py:160 · conf 1.00
[MINED110] Blocking call `requests.post` inside async function `chat_completion`: `requests.post` is a synchronous (blocking) call. When invoked inside an `async def` it stalls the event loop, preven…
high MINED112 FastAPI POST/PUT/DELETE/PATCH endpoint without auth CWE-306CWE-862
src/open_llm_vtuber/routes.py:142 · conf 0.80
[MINED112] FastAPI POST /asr has no auth: Handler `transcribe_audio` is registered with router/app.post(...) but no Depends/Security parameter is declared and no auth marker appears in the function b…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/codeql.yml:58 · conf 0.90
[MINED115] Action `actions/checkout` pinned to mutable ref `@v4`: `uses: actions/checkout@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-a…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/codeql.yml:62 · conf 0.90
[MINED115] Action `github/codeql-action/init` pinned to mutable ref `@v3`: `uses: github/codeql-action/init@v3` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; …
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/codeql.yml:90 · conf 0.90
[MINED115] Action `github/codeql-action/analyze` pinned to mutable ref `@v3`: `uses: github/codeql-action/analyze@v3` resolves at workflow-run time. Tags and branches can be re-pushed by the action o…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/create_release.yml:28 · conf 0.90
[MINED115] Action `actions/checkout` pinned to mutable ref `@v3`: `uses: actions/checkout@v3` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-a…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/create_release.yml:40 · conf 0.90
[MINED115] Action `actions/checkout` pinned to mutable ref `@v3`: `uses: actions/checkout@v3` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-a…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/create_release.yml:60 · conf 0.90
[MINED115] Action `actions/setup-python` pinned to mutable ref `@v4`: `uses: actions/setup-python@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made …
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/create_release.yml:132 · conf 0.90
[MINED115] Action `actions/upload-artifact` pinned to mutable ref `@v4`: `uses: actions/upload-artifact@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/create_release.yml:140 · conf 0.90
[MINED115] Action `actions/upload-artifact` pinned to mutable ref `@v4`: `uses: actions/upload-artifact@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/create_release.yml:148 · conf 0.90
[MINED115] Action `actions/upload-artifact` pinned to mutable ref `@v4`: `uses: actions/upload-artifact@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/create_release.yml:156 · conf 0.90
[MINED115] Action `actions/upload-artifact` pinned to mutable ref `@v4`: `uses: actions/upload-artifact@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/create_release.yml:227 · conf 0.90
[MINED115] Action `actions/upload-artifact` pinned to mutable ref `@v4`: `uses: actions/upload-artifact@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/docker-blacksmith.yml:82 · conf 0.90
[MINED115] Action `actions/checkout` pinned to mutable ref `@v4`: `uses: actions/checkout@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-a…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/docker-blacksmith.yml:85 · conf 0.90
[MINED115] Action `useblacksmith/setup-docker-builder` pinned to mutable ref `@v1`: `uses: useblacksmith/setup-docker-builder@v1` resolves at workflow-run time. Tags and branches can be re-pushed by …
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/docker-blacksmith.yml:140 · conf 0.90
[MINED115] Action `useblacksmith/build-push-action` pinned to mutable ref `@v2`: `uses: useblacksmith/build-push-action@v2` resolves at workflow-run time. Tags and branches can be re-pushed by the ac…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/fossa_scan.yml:13 · conf 0.90
[MINED115] Action `actions/checkout` pinned to mutable ref `@v3`: `uses: actions/checkout@v3` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-a…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/fossa_scan.yml:14 · conf 0.90
[MINED115] Action `fossas/fossa-action` pinned to mutable ref `@main`: `uses: fossas/fossa-action@main` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that mad…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/ruff.yml:7 · conf 0.90
[MINED115] Action `actions/checkout` pinned to mutable ref `@v4`: `uses: actions/checkout@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-a…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/ruff.yml:8 · conf 0.90
[MINED115] Action `astral-sh/ruff-action` pinned to mutable ref `@v3`: `uses: astral-sh/ruff-action@v3` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that mad…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/update-requirements.yml:15 · conf 0.90
[MINED115] Action `actions/checkout` pinned to mutable ref `@v4`: `uses: actions/checkout@v4` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-a…
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/update-requirements.yml:19 · conf 0.90
[MINED115] Action `astral-sh/setup-uv` pinned to mutable ref `@v3`: `uses: astral-sh/setup-uv@v3` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the …
high MINED115 GitHub Action pinned to mutable ref (not 40-char SHA) CWE-829
.github/workflows/update-requirements.yml:25 · conf 0.90
[MINED115] Action `stefanzweifel/git-auto-commit-action` pinned to mutable ref `@v5`: `uses: stefanzweifel/git-auto-commit-action@v5` resolves at workflow-run time. Tags and branches can be re-pushed…
high MINED118 Dockerfile FROM not pinned by sha256 digest CWE-829
dockerfile:1 · conf 0.90
[MINED118] Dockerfile FROM `python:3.10-slim` not pinned by digest: `FROM python:3.10-slim` resolves the tag at build time. The registry CAN re-push a different image for the same tag, so every build…
high MINED131 pre-commit hook pinned to branch/tag instead of SHA CWE-829
.pre-commit-config.yaml:2 · conf 0.90
[MINED131] pre-commit hook `https://github.com/astral-sh/ruff-pre-commit` pinned to mutable rev `v0.9.6`: `.pre-commit-config.yaml` references `https://github.com/astral-sh/ruff-pre-commit` at `rev: …
high SEC029 Server-Side Request Forgery (SSRF) — outbound HTTP from user input
src/open_llm_vtuber/agent/stateless_llm/claude_llm.py:28 · conf 1.00
[SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTTP request to a user-controlled URL without allowlist validation. Attackers can probe internal services (169.25…
high SEC029 Server-Side Request Forgery (SSRF) — outbound HTTP from user input
src/open_llm_vtuber/agent/stateless_llm/ollama_llm.py:35 · conf 1.00
[SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTTP request to a user-controlled URL without allowlist validation. Attackers can probe internal services (169.25…
high SEC029 Server-Side Request Forgery (SSRF) — outbound HTTP from user input
src/open_llm_vtuber/agent/stateless_llm/openai_compatible_llm.py:39 · conf 1.00
[SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input: Outbound HTTP request to a user-controlled URL without allowlist validation. Attackers can probe internal services (169.25…
high SEC078 Python: requests without timeout
src/open_llm_vtuber/agent/stateless_llm/ollama_llm.py:35 · conf 1.00
[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang indefinitely on a non-responsive server, causing thread exhaustion and ReDoS. Ported from bandit B113 (Apache-…
high SEC078 Python: requests without timeout
src/open_llm_vtuber/agent/stateless_llm/stateless_llm_with_template.py:160 · conf 1.00
[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang indefinitely on a non-responsive server, causing thread exhaustion and ReDoS. Ported from bandit B113 (Apache-…
high SEC078 Python: requests without timeout
src/open_llm_vtuber/asr/utils.py:27 · conf 1.00
[SEC078] Python: requests without timeout: requests.get/post without a timeout will hang indefinitely on a non-responsive server, causing thread exhaustion and ReDoS. Ported from bandit B113 (Apache-…
high SEC080 Python: tarfile.extractall without filter
src/open_llm_vtuber/asr/utils.py:108 · conf 1.00
[SEC080] Python: tarfile.extractall without filter: tarfile.extract*() without filter='data' allows path-traversal (CVE-2007-4559, fixed via PEP 706 in 3.12). Ported from bandit B202 (Apache-2.0).
high SEC128 Async function without await — fire-and-forget Promise (AI mistake)
src/open_llm_vtuber/asr/utils.py:100 · conf 1.00
[SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call invoked without `await` returns an unhandled Promise. The outer function resolves before the inner work comple…
high SEC128 Async function without await — fire-and-forget Promise (AI mistake)
src/open_llm_vtuber/chat_group.py:235 · conf 1.00
[SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call invoked without `await` returns an unhandled Promise. The outer function resolves before the inner work comple…
high SEC128 Async function without await — fire-and-forget Promise (AI mistake)
src/open_llm_vtuber/vad/silero.py:144 · conf 1.00
[SEC128] Async function without await — fire-and-forget Promise (AI mistake): Async call invoked without `await` returns an unhandled Promise. The outer function resolves before the inner work comple…
medium AUC001 [AUC001] No Repobility access matrix policy found: The repository uses web/API frameworks but does not define .repobility/access.yml or equivalent authorization documentation.
· conf 0.92
[AUC001] No Repobility access matrix policy found: The repository uses web/API frameworks but does not define .repobility/access.yml or equivalent authorization documentation.
medium AUC002 [AUC002] Low visible authorization coverage in route inventory: Only 0.0% of discovered routes show nearby authentication, authorization, middleware, or public-route evidence.
· conf 0.74
[AUC002] Low visible authorization coverage in route inventory: Only 0.0% of discovered routes show nearby authentication, authorization, middleware, or public-route evidence.
medium AUC012 [AUC012] FastAPI interactive docs may be exposed by framework defaults: FastAPI exposes /docs, /redoc, and /openapi.json by default. Public production APIs should explicitly disable those defaults, protect them behind admin authentication, or publish a reviewed OpenAPI spec with declared security requirements.
· conf 0.72
[AUC012] FastAPI interactive docs may be exposed by framework defaults: FastAPI exposes /docs, /redoc, and /openapi.json by default. Public production APIs should explicitly disable those defaults, p…
medium COMP001 [COMP001] High cognitive complexity: Function `load_yfinance_data` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested branches, boolean chains, and recursion all weigh in. Breakdown: except=1, for=1, if=2, nested_bonus=3, or=2.
run_server.py:50 · conf 0.95
[COMP001] High cognitive complexity: Function `check_frontend_submodule` has cognitive complexity 20 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to underst…
medium COMP001 [COMP001] High cognitive complexity: Function `load_yfinance_data` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested branches, boolean chains, and recursion all weigh in. Breakdown: except=1, for=1, if=2, nested_bonus=3, or=2.
src/open_llm_vtuber/agent/agent_factory.py:17 · conf 0.95
[COMP001] High cognitive complexity: Function `create_agent` has cognitive complexity 16 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested…
medium DKR001 Docker final stage has no non-root USER
dockerfile:1 · conf 0.82
Docker final stage has no non-root USER
medium DKR014 Dockerfile copies the entire context without .dockerignore
dockerfile:27 · conf 0.76
Dockerfile copies broad context with incomplete .dockerignore
medium ERR001 [ERR001] Silent Exception Swallowing (and 2 more): Same pattern found in 2 additional files. Review if needed.
upgrade_codes/upgrade_core/language.py:24 · conf 1.00
[ERR001] Silent Exception Swallowing: Silently swallowing all exceptions hides bugs. Even in cleanup code, log at DEBUG level.
medium MINED109 Mutable default argument CWE-1023
src/open_llm_vtuber/asr/azure_asr.py:15 · conf 1.00
[MINED109] Mutable default argument in `__init__` (list): `def __init__(... = []/{}/set())` — Python's default value is constructed ONCE at function definition time and shared across all calls. Mutat…
medium MINED111 Bare except continues silently
src/open_llm_vtuber/asr/fun_asr.py:98 · conf 1.00
[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose.
medium MINED111 Bare except continues silently
src/open_llm_vtuber/chat_history_manager.py:229 · conf 1.00
[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose.
medium MINED111 Bare except continues silently
src/open_llm_vtuber/live/bilibili_live.py:74 · conf 1.00
[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose.
medium MINED111 Bare except continues silently
upgrade_codes/upgrade_core/upgrade_utils.py:35 · conf 1.00
[MINED111] Bare except continues silently: Bare `except:` (or `except Exception:`) that runs code without re-raising or logging the exception. Hides real failures and makes bugs hard to diagnose.
medium SEC005 Command Injection Risk
src/open_llm_vtuber/utils/install_utils.py:116 · conf 0.50
[SEC005] Command Injection Risk: Unsafe shell execution or eval of user input.
medium SEC005 Command Injection Risk
upgrade_codes/upgrade_core/upgrade_utils.py:20 · conf 0.50
[SEC005] Command Injection Risk: Unsafe shell execution or eval of user input.
medium SEC007 Unsafe Deserialization
upgrade_codes/compare_yaml.py:80 · conf 1.00
[SEC007] Unsafe Deserialization: Unsafe deserialization can execute arbitrary code.
medium SEC007 Unsafe Deserialization
upgrade_codes/config_sync.py:121 · conf 1.00
[SEC007] Unsafe Deserialization: Unsafe deserialization can execute arbitrary code.
medium SEC007 Unsafe Deserialization
upgrade_codes/upgrade_core/comment_diff_fn.py:23 · conf 1.00
[SEC007] Unsafe Deserialization: Unsafe deserialization can execute arbitrary code.
medium SEC012 ZipSlip — Archive Path Traversal
src/open_llm_vtuber/asr/utils.py:108 · conf 1.00
[SEC012] ZipSlip — Archive Path Traversal: Archive extraction without path validation allows writing files outside the target directory.
medium SEC034 Log Injection / Log Forging — unsanitized user input in log
src/open_llm_vtuber/conversations/single_conversation.py:84 · conf 1.00
[SEC034] Log Injection / Log Forging — unsanitized user input in log: User input is logged without sanitizing newlines or control characters. Attackers inject `\n` to forge fake log entries, hide tra…
medium SEC034 Log Injection / Log Forging — unsanitized user input in log
src/open_llm_vtuber/message_handler.py:49 · conf 1.00
[SEC034] Log Injection / Log Forging — unsanitized user input in log: User input is logged without sanitizing newlines or control characters. Attackers inject `\n` to forge fake log entries, hide tra…
medium SEC034 Log Injection / Log Forging — unsanitized user input in log
src/open_llm_vtuber/translate/deeplx.py:25 · conf 1.00
[SEC034] Log Injection / Log Forging — unsanitized user input in log: User input is logged without sanitizing newlines or control characters. Attackers inject `\n` to forge fake log entries, hide tra…
medium SEC037 Uncontrolled Recursion — stack/depth exhaustion
upgrade_codes/config_sync.py:121 · conf 1.00
[SEC037] Uncontrolled Recursion — stack/depth exhaustion: Parsing arbitrary-depth user input (XML, JSON, YAML) without a depth limit, or recursive function over user-controlled structure. Attacker se…
medium SEC119 World-writable / world-readable file permissions
src/open_llm_vtuber/utils/install_utils.py:64 · conf 1.00
[SEC119] World-writable / world-readable file permissions: World-writable files let any local user (or container neighbor) tamper with data; world-readable files leak secrets.
medium WEB003 Public web service has no security.txt
.well-known/security.txt · conf 0.78
Public web service has no security.txt
low AIC003 Duplicated implementation block across source files
src/open_llm_vtuber/live2d_model.py:41 · conf 0.86
Duplicated implementation block across source files
low AIC003 Duplicated implementation block across source files
src/open_llm_vtuber/tts/cosyvoice_tts.py:2 · conf 0.86
Duplicated implementation block across source files
low AIC003 Duplicated implementation block across source files
src/open_llm_vtuber/tts/edge_tts.py:13 · conf 0.86
Duplicated implementation block across source files
low AIC003 Duplicated implementation block across source files
src/open_llm_vtuber/tts/melo_tts.py:18 · conf 0.86
Duplicated implementation block across source files
low AUC005 [AUC005] No authorization-focused tests detected: No test files with common authorization, ownership, 403, admin, or super_admin assertions were found.
· conf 0.76
[AUC005] No authorization-focused tests detected: No test files with common authorization, ownership, 403, admin, or super_admin assertions were found.
low COMP001 [COMP001] High cognitive complexity: Function `load_yfinance_data` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested branches, boolean chains, and recursion all weigh in. Breakdown: except=1, for=1, if=2, nested_bonus=3, or=2.
prompts/prompt_loader.py:12 · conf 0.95
[COMP001] High cognitive complexity: Function `_load_file_content` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — n…
low DKR008 .dockerignore misses sensitive defaults
.dockerignore · conf 0.72
.dockerignore misses sensitive defaults
low DKR012 Dockerfile keeps pip download cache
dockerfile:28 · conf 0.72
Dockerfile keeps pip download cache
info COMP001 [COMP001] High cognitive complexity: Function `load_yfinance_data` has cognitive complexity 9 (SonarSource scale). Cognitive complexity measures how hard the function is for a human to understand — nested branches, boolean chains, and recursion all weigh in. Breakdown: except=1, for=1, if=2, nested_bonus=3, or=2.
· conf 0.20
[COMP001] High cognitive complexity (and 61 more): Same pattern found in 61 additional files. Review if needed.
info MINED001 Bare Except Pass CWE-755
· conf 0.20
[MINED001] Bare Except Pass (and 2 more): Same pattern found in 2 additional files. Review if needed.
info MINED018 Unsafe Deserialization Pickle CWE-502
· conf 0.20
[MINED018] Unsafe Deserialization Pickle (and 1 more): Same pattern found in 1 additional files. Review if needed.
info MINED040 Python Yaml Load Unsafe CWE-502
· conf 0.20
[MINED040] Python Yaml Load Unsafe (and 1 more): Same pattern found in 1 additional files. Review if needed.
info MINED043 Http Not Https CWE-319
src/open_llm_vtuber/agent/agents/letta_agent.py:31 · conf 1.00
[MINED043] Http Not Https: Hardcoded http:// (not localhost) for endpoints that handle credentials or data.
info MINED044 Js Console Log Prod CWE-532
web_tool/recorder.js:28 · conf 1.00
[MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger or removed.
info MINED050 Stub Only Function CWE-1188
· conf 0.20
[MINED050] Stub Only Function (and 15 more): Same pattern found in 15 additional files. Review if needed.
info MINED050 Stub Only Function CWE-1188
prompts/prompt_loader.py:50 · conf 1.00
[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment.
info MINED050 Stub Only Function CWE-1188
src/open_llm_vtuber/agent/agents/agent_interface.py:43 · conf 1.00
[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment.
info MINED050 Stub Only Function CWE-1188
src/open_llm_vtuber/agent/agents/hume_ai.py:241 · conf 1.00
[MINED050] Stub Only Function: Function declared but body is just pass, return None, raise NotImplementedError, or TODO comment.
info MINED062 Python Dataclass No Fields
· conf 0.20
[MINED062] Python Dataclass No Fields (and 1 more): Same pattern found in 1 additional files. Review if needed.
info MINED062 Python Dataclass No Fields
src/open_llm_vtuber/agent/input_types.py:22 · conf 1.00
[MINED062] Python Dataclass No Fields: @dataclass over an empty class — unfinished model.
info MINED062 Python Dataclass No Fields
src/open_llm_vtuber/agent/output_types.py:6 · conf 1.00
[MINED062] Python Dataclass No Fields: @dataclass over an empty class — unfinished model.
info MINED062 Python Dataclass No Fields
src/open_llm_vtuber/conversations/types.py:24 · conf 1.00
[MINED062] Python Dataclass No Fields: @dataclass over an empty class — unfinished model.
info MINED064 Python Input Call
upgrade.py:24 · conf 1.00
[MINED064] Python Input Call: input() blocks for stdin. Inappropriate in services.
info MINED067 Python Requests No Timeout CWE-400
· conf 0.20
[MINED067] Python Requests No Timeout (and 2 more): Same pattern found in 2 additional files. Review if needed.
info MINED067 Python Requests No Timeout CWE-400
src/open_llm_vtuber/agent/stateless_llm/ollama_llm.py:35 · conf 1.00
[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang forever.
info MINED067 Python Requests No Timeout CWE-400
src/open_llm_vtuber/agent/stateless_llm/stateless_llm_with_template.py:160 · conf 1.00
[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang forever.
info MINED067 Python Requests No Timeout CWE-400
src/open_llm_vtuber/asr/utils.py:27 · conf 1.00
[MINED067] Python Requests No Timeout: requests.get/post/etc. without timeout= can hang forever.
info SEC007 Unsafe Deserialization
· conf 0.20
[SEC007] Unsafe Deserialization (and 1 more): Same pattern found in 1 additional files. Review if needed.
info SEC029 Server-Side Request Forgery (SSRF) — outbound HTTP from user input
· conf 0.20
[SEC029] Server-Side Request Forgery (SSRF) — outbound HTTP from user input (and 6 more): Same pattern found in 6 additional files. Review if needed.
info SEC078 Python: requests without timeout
· conf 0.20
[SEC078] Python: requests without timeout (and 2 more): Same pattern found in 2 additional files. Review if needed.
info SEC079 Python: yaml.load without SafeLoader
· conf 0.20
[SEC079] Python: yaml.load without SafeLoader (and 1 more): Same pattern found in 1 additional files. Review if needed.
info SEC116 Ruby YAML.load / Marshal.load on untrusted input
· conf 0.20
[SEC116] Ruby YAML.load / Marshal.load on untrusted input (and 1 more): Same pattern found in 1 additional files. Review if needed.

Reading from rp.scan + rp.finding + rp.rule (unified schema, R78 series). Legacy data path unchanged. Compare with /scan/42006152-1d92-47d5-9b25-d33bc637259d/.