{"schema_version":"2","scorer_version":"0.1.0","scoring_version":"prov-5+qual-2+sec-2","generated_at":"2026-11-14T15:58:32.286557Z","repo":{"ref":{"host":"github.com","owner":"JingMatrix","name":"Vector"},"default_branch":"master","clone_url":"https://github.com/JingMatrix/Vector.git","html_url":"https://github.com/JingMatrix/Vector","description":"Modern Xposed Framework","stars":13154,"forks":895,"is_fork":false,"is_archived":false,"is_private":false,"size_kb":26508,"primary_language":"Kotlin","license_spdx":"GPL-3.0","created_at":"2023-07-20T18:03:30Z","pushed_at":"2026-11-10T01:45:27Z","security_policy_url":null,"distribution":{"owner_created_at":"2016-12-09T12:26:12Z","owner_type":"User","release_assets":[{"name":"Vector-v2.2-3118-Debug.zip","size":34579878,"download_count":1277,"release_tag":"canary-3118","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3118/Vector-v2.2-3118-Debug.zip"},{"name":"Vector-v2.2-3118-Release.zip","size":7452170,"download_count":8614,"release_tag":"canary-3118","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3118/Vector-v2.2-3118-Release.zip"},{"name":"Vector-v2.2-3117-Debug.zip","size":34660372,"download_count":256,"release_tag":"canary-3117","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3117/Vector-v2.2-3117-Debug.zip"},{"name":"Vector-v2.2-3117-Release.zip","size":7478142,"download_count":1657,"release_tag":"canary-3117","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3117/Vector-v2.2-3117-Release.zip"},{"name":"Vector-v2.2-3116-Debug.zip","size":34613504,"download_count":898,"release_tag":"canary-3116","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3116/Vector-v2.2-3116-Debug.zip"},{"name":"Vector-v2.2-3116-Release.zip","size":7459864,"download_count":6247,"release_tag":"canary-3116","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3116/Vector-v2.2-3116-Release.zip"},{"name":"Vector-v2.2-3115-Debug.zip","size":34611952,"download_count":145,"release_tag":"canary-3115","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3115/Vector-v2.2-3115-Debug.zip"},{"name":"Vector-v2.2-3115-Release.zip","size":7459637,"download_count":697,"release_tag":"canary-3115","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3115/Vector-v2.2-3115-Release.zip"},{"name":"Vector-v2.2-3114-Debug.zip","size":34611765,"download_count":559,"release_tag":"canary-3114","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3114/Vector-v2.2-3114-Debug.zip"},{"name":"Vector-v2.2-3114-Release.zip","size":7459117,"download_count":4104,"release_tag":"canary-3114","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3114/Vector-v2.2-3114-Release.zip"},{"name":"Vector-v2.2-3080-Debug.zip","size":36944715,"download_count":90703,"release_tag":"v2.2","url":"https://github.com/JingMatrix/Vector/releases/download/v2.2/Vector-v2.2-3080-Debug.zip"},{"name":"Vector-v2.2-3080-Release.zip","size":9316843,"download_count":248348,"release_tag":"v2.2","url":"https://github.com/JingMatrix/Vector/releases/download/v2.2/Vector-v2.2-3080-Release.zip"},{"name":"Vector-v2.1-3073-Debug.zip","size":36829107,"download_count":4464,"release_tag":"v2.1","url":"https://github.com/JingMatrix/Vector/releases/download/v2.1/Vector-v2.1-3073-Debug.zip"},{"name":"Vector-v2.1-3073-Release.zip","size":9260925,"download_count":14472,"release_tag":"v2.1","url":"https://github.com/JingMatrix/Vector/releases/download/v2.1/Vector-v2.1-3073-Release.zip"},{"name":"Vector-v2.0-3021-Debug.zip","size":21253182,"download_count":427871,"release_tag":"v2.0","url":"https://github.com/JingMatrix/Vector/releases/download/v2.0/Vector-v2.0-3021-Debug.zip"},{"name":"Vector-v2.0-3021-Release.zip","size":8434264,"download_count":542059,"release_tag":"v2.0","url":"https://github.com/JingMatrix/Vector/releases/download/v2.0/Vector-v2.0-3021-Release.zip"},{"name":"LSPosed-v1.11.0-7209-zygisk-debug.zip","size":18029283,"download_count":808958,"release_tag":"v1.11.0","url":"https://github.com/JingMatrix/Vector/releases/download/v1.11.0/LSPosed-v1.11.0-7209-zygisk-debug.zip"},{"name":"LSPosed-v1.11.0-7209-zygisk-release.zip","size":6785684,"download_count":844381,"release_tag":"v1.11.0","url":"https://github.com/JingMatrix/Vector/releases/download/v1.11.0/LSPosed-v1.11.0-7209-zygisk-release.zip"},{"name":"LSPosed-v1.10.2-7182-zygisk-debug.zip","size":15049029,"download_count":4337744,"release_tag":"v1.10.2","url":"https://github.com/JingMatrix/Vector/releases/download/v1.10.2/LSPosed-v1.10.2-7182-zygisk-debug.zip"},{"name":"LSPosed-v1.10.2-7182-zygisk-release.zip","size":6507377,"download_count":4211769,"release_tag":"v1.10.2","url":"https://github.com/JingMatrix/Vector/releases/download/v1.10.2/LSPosed-v1.10.2-7182-zygisk-release.zip"}]}},"commit_sha":"91e77e439619bdee53c106ba9c82b9e08051c3e9","profile":{"lines_by_language":{"Kotlin":49526,"Java":8610,"C++":5214,"C":2101,"Shell":160,"Python":67},"files_by_category":{"source":376,"config":265,"other":30,"docs":16,"binary":1},"source_lines":65678,"test_lines":0},"pillars":{"ai_provenance":{"score":0.2,"confidence":0.65,"coverage":1.0,"label":"possible","breakdown":{"attributed_share":0.0018,"suspected_share":0.027,"estimated_share":0.0018,"ai_artifacts":0.0,"flagged_work_units":3.0,"flagged_releases":0.0,"style_index":0.046},"summary":"Weak signals consistent with AI-assisted development. 2 commit(s) carry explicit AI attribution, too few to characterize the codebase."},"quality":{"score":60.0,"confidence":0.9,"coverage":1.0,"label":"weak","breakdown":{"complexity":71.0,"duplication":84.1,"lint":99.8,"testing":15.0,"docs":65.0,"type_safety":40.0,"process":null},"summary":"Code quality is weak: test-to-source ratio 0.00, no CI test run detected; 11% of function code in complex or long functions; 3% duplicated lines. Weakest area: testing."},"security":{"score":71.9,"confidence":0.85,"coverage":1.0,"label":"adequate","breakdown":{"secrets":96.7,"sast":97.0,"dependencies":null,"ci_actions":5.1,"posture":60.0,"scorecard":null},"summary":"Security posture is adequate: 2 high-severity SAST findings; 15 high-severity workflow issues. Weakest area: ci actions."}},"analyzer_results":[{"analyzer":"sec-scorecard","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no published OpenSSF Scorecard result for this repo"},{"analyzer":"sec-registry","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":"no registry dependencies declared"},{"analyzer":"ai-attribution","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"commits":3072.0,"attributed_commits":2.0,"attributed_commit_share":0.0006510416666666666,"effective_loc":381260.0,"attributed_loc":698.0,"attributed_loc_share":0.0018307716518910979,"tools_detected":2.0},"findings":[],"evidence":[{"kind":"attribution-summary","description":"OpenAI Codex: 1 attributed commits, 383 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attribution-summary","description":"Claude Code: 1 attributed commits, 315 lines added","ref":null,"url":null,"weight":1.0},{"kind":"attributed-commit","description":"Claude Code: PR description attribution","ref":"7fd88c9ecd5f707d429f215b6f38f37256056dd4","url":"https://github.com/JingMatrix/Vector/commit/7fd88c9ecd5f707d429f215b6f38f37256056dd4","weight":0.9},{"kind":"attributed-commit","description":"OpenAI Codex: PR branch 'codex/fix-module-repo-loader'","ref":"2a633ef0943fba24a71e4f0bf00e434b0da5c7d5","url":"https://github.com/JingMatrix/Vector/commit/2a633ef0943fba24a71e4f0bf00e434b0da5c7d5","weight":0.9}],"data":{"attributed_loc_by_commit":{"2a633ef0943fba24a71e4f0bf00e434b0da5c7d5":383,"7fd88c9ecd5f707d429f215b6f38f37256056dd4":315},"tools":{"openai-codex":{"name":"OpenAI Codex","commits":1,"loc":383,"first_seen":1784099293,"last_seen":1784099293},"claude-code":{"name":"Claude Code","commits":1,"loc":315,"first_seen":1784953942,"last_seen":1784953942}},"monthly":{"2014-01":{"loc":17,"attributed_loc":0},"2019-01":{"loc":134065,"attributed_loc":0},"2019-02":{"loc":2055,"attributed_loc":0},"2019-03":{"loc":9690,"attributed_loc":0},"2019-04":{"loc":1586,"attributed_loc":0},"2019-05":{"loc":8025,"attributed_loc":0},"2019-06":{"loc":2923,"attributed_loc":0},"2019-07":{"loc":0,"attributed_loc":0},"2019-09":{"loc":16,"attributed_loc":0},"2019-10":{"loc":38,"attributed_loc":0},"2019-11":{"loc":72,"attributed_loc":0},"2019-12":{"loc":37,"attributed_loc":0},"2020-01":{"loc":758,"attributed_loc":0},"2020-02":{"loc":10666,"attributed_loc":0},"2020-03":{"loc":2615,"attributed_loc":0},"2020-04":{"loc":1030,"attributed_loc":0},"2020-05":{"loc":17,"attributed_loc":0},"2020-06":{"loc":71,"attributed_loc":0},"2020-07":{"loc":143,"attributed_loc":0},"2020-08":{"loc":343,"attributed_loc":0},"2020-09":{"loc":12,"attributed_loc":0},"2020-10":{"loc":277,"attributed_loc":0},"2020-11":{"loc":3967,"attributed_loc":0},"2020-12":{"loc":13640,"attributed_loc":0},"2021-01":{"loc":42096,"attributed_loc":0},"2021-02":{"loc":17628,"attributed_loc":0},"2021-03":{"loc":4212,"attributed_loc":0},"2021-04":{"loc":4567,"attributed_loc":0},"2021-05":{"loc":3996,"attributed_loc":0},"2021-06":{"loc":1044,"attributed_loc":0},"2021-07":{"loc":814,"attributed_loc":0},"2021-08":{"loc":3965,"attributed_loc":0},"2021-09":{"loc":3061,"attributed_loc":0},"2021-10":{"loc":2779,"attributed_loc":0},"2021-11":{"loc":5375,"attributed_loc":0},"2021-12":{"loc":1053,"attributed_loc":0},"2022-01":{"loc":1254,"attributed_loc":0},"2022-02":{"loc":2065,"attributed_loc":0},"2022-03":{"loc":1812,"attributed_loc":0},"2022-04":{"loc":1947,"attributed_loc":0},"2022-05":{"loc":282,"attributed_loc":0},"2022-06":{"loc":103,"attributed_loc":0},"2022-07":{"loc":29,"attributed_loc":0},"2022-08":{"loc":23,"attributed_loc":0},"2022-09":{"loc":39,"attributed_loc":0},"2022-10":{"loc":366,"attributed_loc":0},"2022-11":{"loc":157,"attributed_loc":0},"2022-12":{"loc":2573,"attributed_loc":0},"2023-01":{"loc":5604,"attributed_loc":0},"2023-02":{"loc":810,"attributed_loc":0},"2023-03":{"loc":369,"attributed_loc":0},"2023-04":{"loc":111,"attributed_loc":0},"2023-05":{"loc":80,"attributed_loc":0},"2023-06":{"loc":85,"attributed_loc":0},"2023-07":{"loc":610,"attributed_loc":0},"2023-08":{"loc":1018,"attributed_loc":0},"2023-09":{"loc":41,"attributed_loc":0},"2023-10":{"loc":185,"attributed_loc":0},"2023-11":{"loc":0,"attributed_loc":0},"2023-12":{"loc":74,"attributed_loc":0},"2024-01":{"loc":192,"attributed_loc":0},"2024-02":{"loc":188,"attributed_loc":0},"2024-05":{"loc":4210,"attributed_loc":0},"2024-06":{"loc":1,"attributed_loc":0},"2024-07":{"loc":2402,"attributed_loc":0},"2024-08":{"loc":287,"attributed_loc":0},"2024-09":{"loc":1133,"attributed_loc":0},"2024-10":{"loc":66,"attributed_loc":0},"2024-11":{"loc":143,"attributed_loc":0},"2024-12":{"loc":265,"attributed_loc":0},"2025-01":{"loc":164,"attributed_loc":0},"2025-02":{"loc":8,"attributed_loc":0},"2025-03":{"loc":88,"attributed_loc":0},"2025-04":{"loc":0,"attributed_loc":0},"2025-07":{"loc":10,"attributed_loc":0},"2025-08":{"loc":588,"attributed_loc":0},"2025-09":{"loc":72,"attributed_loc":0},"2025-11":{"loc":113,"attributed_loc":0},"2026-01":{"loc":801,"attributed_loc":0},"2026-02":{"loc":74,"attributed_loc":0},"2026-03":{"loc":10020,"attributed_loc":0},"2026-04":{"loc":5664,"attributed_loc":0},"2026-07":{"loc":31106,"attributed_loc":698},"2026-08":{"loc":19526,"attributed_loc":0},"2026-09":{"loc":484,"attributed_loc":0},"2026-10":{"loc":370,"attributed_loc":0},"2026-11":{"loc":995,"attributed_loc":0}}},"error":null},{"analyzer":"ai-artifacts","pillar":"ai_provenance","status":"ok","tool_version":"signatures-v1","metrics":{"artifacts":0.0,"workflow_agents":0.0,"tools_configured":0.0},"findings":[],"evidence":[],"data":{"artifacts":[],"workflows":[],"tools":[]},"error":null},{"analyzer":"ai-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-5","metrics":{"work_units":1755.0,"flagged_units":3.0,"pre_ai_era_bursts":5.0,"pre_ai_era_measured_loc":69355.0,"pre_ai_era_burst_loc":13485.0,"measured_loc":137993.0,"flagged_loc":10299.0,"flagged_loc_share":0.07463422057640605,"max_loc_per_hour":3403.238866396761,"median_loc_per_hour":55.5,"pr_timed_units":86.0,"excluded_import_loc":243267.0},"findings":[],"evidence":[{"kind":"velocity-burst","description":"3,735 lines of first-party code in ~4.0h (934 lines/hour, 1 commit session)","ref":"5d782a76803630addaeca19a56482ae334ece0d6","url":"https://github.com/JingMatrix/Vector/commit/5d782a76803630addaeca19a56482ae334ece0d6","weight":0.28012499999999996},{"kind":"velocity-burst","description":"4,182 lines of first-party code in ~4.6h (906 lines/hour, 3 commit session)","ref":"17625a04d5cd7c6f041c087a65c2dc2a3b30984e","url":"https://github.com/JingMatrix/Vector/commit/17625a04d5cd7c6f041c087a65c2dc2a3b30984e","weight":0.2718690182387287},{"kind":"velocity-burst","description":"2,382 lines of first-party code in ~4.0h (596 lines/hour, 1 commit session)","ref":"779faeb5ee9277aa9f329519c698b7867031ea43","url":"https://github.com/JingMatrix/Vector/commit/779faeb5ee9277aa9f329519c698b7867031ea43","weight":0.17865}],"data":{"flagged_loc_by_commit":{"5d782a76803630addaeca19a56482ae334ece0d6":3735,"2e0de88ecac9228e20d8e7f5ca8a9e083093e6be":11,"3146ca36058f5e6d13a3cb436b8bdbfd4b7b1d2f":4170,"17625a04d5cd7c6f041c087a65c2dc2a3b30984e":1,"779faeb5ee9277aa9f329519c698b7867031ea43":2382},"excluded_import_commits":["0ca163d02143e16b7e9cdeb78b30ac298cbff0c3","35bdae390b05bee4deaeaaab89a5ca82aed89339","5dddd6290bc59bd986c54cc49690d07fe1aad468","628ac9fd336bf76a9e622aba03819e3c4135e217","714e6c86b70dcff9166f225e34e243d30d9d7c97","9d6d44c1b0967965c40ec663b369abd34492496f","a7d97a6b281b0f8cca66b5bc15419c76f12f9660","bee5f2e4564dab0e7fd56ed9c7d1c601e476d399","c147582d749442a22f67fab06fe55871e0eb70a5","c362449e331fd535c8d1097e9a9fc24987facf4d","e858ebd70b24610668c70023b70cf088b2565ab9"]},"error":null},{"analyzer":"ai-release-velocity","pillar":"ai_provenance","status":"ok","tool_version":"prov-5","metrics":{"releases":13.0,"flagged_releases":0.0,"max_loc_per_day":2138.0},"findings":[],"evidence":[],"data":{"releases":[{"from":"v1.9.2","to":"v1.10.0","loc":4313,"days":286.48,"loc_per_day":15.1,"flagged":false},{"from":"v1.10.0","to":"v1.10.1","loc":4198,"days":84.39,"loc_per_day":49.7,"flagged":false},{"from":"v1.10.1","to":"v1.10.2","loc":729,"days":269.02,"loc_per_day":2.7,"flagged":false},{"from":"v1.10.2","to":"v1.11.0","loc":1580,"days":203.55,"loc_per_day":7.8,"flagged":false},{"from":"v1.11.0","to":"v2.0","loc":613,"days":49.86,"loc_per_day":12.3,"flagged":false},{"from":"v2.0","to":"canary-3053","loc":1873,"days":128.44,"loc_per_day":14.6,"flagged":false},{"from":"canary-3053","to":"v2.1","loc":7922,"days":4.0,"loc_per_day":1981.4,"flagged":false},{"from":"v2.1","to":"v2.2","loc":4587,"days":2.15,"loc_per_day":2138.0,"flagged":false},{"from":"v2.2","to":"canary-3114","loc":5051,"days":83.37,"loc_per_day":60.6,"flagged":false},{"from":"canary-3114","to":"canary-3115","loc":89,"days":3.9,"loc_per_day":22.8,"flagged":false},{"from":"canary-3115","to":"canary-3116","loc":34,"days":0.25,"loc_per_day":136.6,"flagged":false},{"from":"canary-3116","to":"canary-3117","loc":870,"days":5.96,"loc_per_day":146.1,"flagged":false},{"from":"canary-3117","to":"canary-3118","loc":125,"days":0.97,"loc_per_day":128.3,"flagged":false}]},"error":null},{"analyzer":"ai-stylometry","pillar":"ai_provenance","status":"ok","tool_version":null,"metrics":{"lines_scanned":65678.0,"index":0.046,"count:narrated_steps":3.0,"per_kloc:narrated_steps":0.046,"files:narrated_steps":3.0,"count:placeholder":0.0,"per_kloc:placeholder":0.0,"files:placeholder":0.0,"count:emoji_in_code":0.0,"per_kloc:emoji_in_code":0.0,"files:emoji_in_code":0.0,"count:assistant_voice":0.0,"per_kloc:assistant_voice":0.0,"files:assistant_voice":0.0},"findings":[],"evidence":[{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // First, check if it exists. If not, we need to \"discover\" it.","ref":"daemon/src/main/kotlin/org/matrix/vector/daemon/data/ModuleDatabase.kt:226","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/daemon/src/main/kotlin/org/matrix/vector/daemon/data/ModuleDatabase.kt#L226","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: * first, and someone who keeps two and switches between them should not be offered a shortcut","ref":"manager/src/main/kotlin/org/matrix/vector/manager/data/repository/SettingsRepository.kt:339","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/manager/src/main/kotlin/org/matrix/vector/manager/data/repository/SettingsRepository.kt#L339","weight":0.0},{"kind":"stylometry:narrated_steps","description":"step-by-step narration comment: // first, because findLibrary answers with the first candidate it can open.","ref":"xposed/src/main/kotlin/org/matrix/vector/impl/core/VectorModuleManager.kt:105","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/xposed/src/main/kotlin/org/matrix/vector/impl/core/VectorModuleManager.kt#L105","weight":0.0}],"data":{},"error":null},{"analyzer":"sec-secrets","pillar":"security","status":"ok","tool_version":"gitleaks 8.30.1","metrics":{"secrets_current":0.0,"secrets_history":0.0,"secrets_nonprod":0.0,"secrets_low_confidence":1.0},"findings":[{"rule_id":"gitleaks/generic-api-key","severity":"low","message":"Possible generic-api-key secret in history (commit c362449e33); removed from the current tree but still retrievable","path":"edxp-core/src/main/cpp/main/src/riru_hook.h","line":24,"fingerprint":"c362449e331fd535c8d1097e9a9fc24987facf4d:edxp-core/src/main/cpp/main/src/riru_hook.h:generic-api-key:24"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-sast","pillar":"security","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":6.0,"findings_high":2.0,"findings_medium":4.0,"findings_low":0.0,"weighted_findings":5.75,"scanned_lines":65678.0,"parse_errors":11.0},"findings":[{"rule_id":"opengrep/python.lang.security.use-defused-xml","severity":"high","message":"The Python documentation recommends using `defusedxml` instead of `xml` because the native Python `xml` library is vulnerable to XML External Entity (XXE) attacks. These attacks can leak confidential data and \"XML bombs\" can cause denial of service. [confidence low]","path":"manager/tools/check_translations.py","line":1,"fingerprint":"python.lang.security.use-defused-xml:manager/tools/check_translations.py:1"},{"rule_id":"opengrep/python.lang.security.use-defused-xml-parse","severity":"high","message":"The native Python `xml` library is vulnerable to XML External Entity (XXE) attacks.  These attacks can leak confidential data and \"XML bombs\" can cause denial of service. Do not use this library to parse untrusted input. Instead  the Python documentation recommends using `defusedxml`. [confidence medium]","path":"manager/tools/check_translations.py","line":6,"fingerprint":"python.lang.security.use-defused-xml-parse:manager/tools/check_translations.py:6"},{"rule_id":"opengrep/java.lang.security.audit.crypto.use-of-md5","severity":"medium","message":"Detected MD5 hash algorithm which is considered insecure. MD5 is not collision resistant and is therefore not suitable as a cryptographic signature. Use HMAC instead. [confidence high]","path":"legacy/src/main/java/de/robv/android/xposed/XSharedPreferences.java","line":250,"fingerprint":"java.lang.security.audit.crypto.use-of-md5:legacy/src/main/java/de/robv/android/xposed/XSharedPreferences.java:250"},{"rule_id":"opengrep/java.lang.security.audit.crypto.use-of-md5","severity":"medium","message":"Detected MD5 hash algorithm which is considered insecure. MD5 is not collision resistant and is therefore not suitable as a cryptographic signature. Use HMAC instead. [confidence high]","path":"legacy/src/main/java/de/robv/android/xposed/XposedHelpers.java","line":1758,"fingerprint":"java.lang.security.audit.crypto.use-of-md5:legacy/src/main/java/de/robv/android/xposed/XposedHelpers.java:1758"},{"rule_id":"opengrep/java.android.security.exported_activity","severity":"medium","message":"The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data.  Ensure that any exported activities do not have privileged access to your application's control plane. [confidence medium]","path":"manager/src/debug/AndroidManifest.xml","line":18,"fingerprint":"java.android.security.exported_activity:manager/src/debug/AndroidManifest.xml:18"},{"rule_id":"opengrep/java.android.security.exported_activity","severity":"medium","message":"The application exports an activity. Any application on the device can launch the exported activity which may compromise the integrity of your application or its data.  Ensure that any exported activities do not have privileged access to your application's control plane. [confidence medium]","path":"manager/src/main/AndroidManifest.xml","line":32,"fingerprint":"java.android.security.exported_activity:manager/src/main/AndroidManifest.xml:32"}],"evidence":[],"data":{"rulesets":["kotlin","java","c","bash","python"]},"error":null},{"analyzer":"sec-deps","pillar":"security","status":"skipped","tool_version":null,"metrics":{},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"sec-actions","pillar":"security","status":"ok","tool_version":"zizmor 1.32.0","metrics":{"workflows":2.0,"findings":21.0,"findings_high":15.0,"findings_medium":4.0,"findings_low":2.0,"penalty":178.2},"findings":[{"rule_id":"zizmor/template-injection","severity":"high","message":"code injection via template expansion [confidence high]","path":".github/workflows/core.yml","line":71,"fingerprint":"template-injection:.github/workflows/core.yml:71"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":39,"fingerprint":"unpinned-uses:.github/workflows/core.yml:39"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":88,"fingerprint":"unpinned-uses:.github/workflows/core.yml:88"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":94,"fingerprint":"unpinned-uses:.github/workflows/core.yml:94"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":103,"fingerprint":"unpinned-uses:.github/workflows/core.yml:103"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":108,"fingerprint":"unpinned-uses:.github/workflows/core.yml:108"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":118,"fingerprint":"unpinned-uses:.github/workflows/core.yml:118"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":140,"fingerprint":"unpinned-uses:.github/workflows/core.yml:140"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":146,"fingerprint":"unpinned-uses:.github/workflows/core.yml:146"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":155,"fingerprint":"unpinned-uses:.github/workflows/core.yml:155"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/core.yml","line":166,"fingerprint":"unpinned-uses:.github/workflows/core.yml:166"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/core.yml","line":94,"fingerprint":"cache-poisoning:.github/workflows/core.yml:94"},{"rule_id":"zizmor/cache-poisoning","severity":"high","message":"runtime artifacts potentially vulnerable to a cache poisoning attack [confidence low]","path":".github/workflows/core.yml","line":108,"fingerprint":"cache-poisoning:.github/workflows/core.yml:108"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/crowdin.yml","line":26,"fingerprint":"unpinned-uses:.github/workflows/crowdin.yml:26"},{"rule_id":"zizmor/unpinned-uses","severity":"high","message":"unpinned action reference [confidence high]","path":".github/workflows/crowdin.yml","line":29,"fingerprint":"unpinned-uses:.github/workflows/crowdin.yml:29"},{"rule_id":"zizmor/dependabot-cooldown","severity":"medium","message":"insufficient cooldown in Dependabot updates [confidence high]","path":".github/dependabot.yml","line":3,"fingerprint":"dependabot-cooldown:.github/dependabot.yml:3"},{"rule_id":"zizmor/dependabot-cooldown","severity":"medium","message":"insufficient cooldown in Dependabot updates [confidence high]","path":".github/dependabot.yml","line":11,"fingerprint":"dependabot-cooldown:.github/dependabot.yml:11"},{"rule_id":"zizmor/dependabot-cooldown","severity":"medium","message":"insufficient cooldown in Dependabot updates [confidence high]","path":".github/dependabot.yml","line":19,"fingerprint":"dependabot-cooldown:.github/dependabot.yml:19"},{"rule_id":"zizmor/excessive-permissions","severity":"medium","message":"overly broad permissions [confidence medium]","path":".github/workflows/crowdin.yml","line":22,"fingerprint":"excessive-permissions:.github/workflows/crowdin.yml:22"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/core.yml","line":38,"fingerprint":"artipacked:.github/workflows/core.yml:38"},{"rule_id":"zizmor/artipacked","severity":"low","message":"credential persistence through GitHub Actions artifacts [confidence low]","path":".github/workflows/crowdin.yml","line":25,"fingerprint":"artipacked:.github/workflows/crowdin.yml:25"}],"evidence":[],"data":{},"error":null},{"analyzer":"sec-posture","pillar":"security","status":"ok","tool_version":null,"metrics":{"check:security_policy":0.0,"check:dependency_updates":1.0,"check:signed_commits":1.0,"check:lockfiles":1.0,"signed_commit_share":0.575,"unpinned_manifests":0.0},"findings":[],"evidence":[{"kind":"posture","description":"Dependency updates: .github/dependabot.yml","ref":".github/dependabot.yml","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"sec-distribution","pillar":"security","status":"ok","tool_version":null,"metrics":{"signals":1.0,"binary_assets":20.0,"suspicious":0.0},"findings":[],"evidence":[{"kind":"binary-release-asset","description":"release canary-3118 ships Vector-v2.2-3118-Debug.zip (1277 downloads)","ref":"Vector-v2.2-3118-Debug.zip","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3118/Vector-v2.2-3118-Debug.zip","weight":0.0},{"kind":"binary-release-asset","description":"release canary-3118 ships Vector-v2.2-3118-Release.zip (8614 downloads)","ref":"Vector-v2.2-3118-Release.zip","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3118/Vector-v2.2-3118-Release.zip","weight":0.0},{"kind":"binary-release-asset","description":"release canary-3117 ships Vector-v2.2-3117-Debug.zip (256 downloads)","ref":"Vector-v2.2-3117-Debug.zip","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3117/Vector-v2.2-3117-Debug.zip","weight":0.0},{"kind":"binary-release-asset","description":"release canary-3117 ships Vector-v2.2-3117-Release.zip (1657 downloads)","ref":"Vector-v2.2-3117-Release.zip","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3117/Vector-v2.2-3117-Release.zip","weight":0.0},{"kind":"binary-release-asset","description":"release canary-3116 ships Vector-v2.2-3116-Debug.zip (898 downloads)","ref":"Vector-v2.2-3116-Debug.zip","url":"https://github.com/JingMatrix/Vector/releases/download/canary-3116/Vector-v2.2-3116-Debug.zip","weight":0.0}],"data":{"signals":["binary-release-assets"],"suspicious":false,"unusual_traction":false,"metadata":true},"error":null},{"analyzer":"qual-complexity","pillar":"quality","status":"ok","tool_version":"lizard 1.25.1","metrics":{"functions":2453.0,"function_nloc":27702.0,"mean_ccn":2.51,"p90_ccn":5.0,"complex_functions":23.0,"long_functions":14.0,"many_param_functions":17.0,"risky_nloc_share":0.114},"findings":[],"evidence":[{"kind":"complex-function","description":"get in daemon/src/main/kotlin/org/matrix/vector/daemon/data/FileSystem.kt: complexity 61, 468 lines","ref":"daemon/src/main/kotlin/org/matrix/vector/daemon/data/FileSystem.kt","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/daemon/src/main/kotlin/org/matrix/vector/daemon/data/FileSystem.kt#L74","weight":1.0},{"kind":"complex-function","description":"vector::native::jni::VECTOR_DEF_NATIVE_METHOD in native/src/jni/hook_bridge.cpp: complexity 38, 147 lines","ref":"native/src/jni/hook_bridge.cpp","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/native/src/jni/hook_bridge.cpp#L552","weight":0.6333333333333333},{"kind":"complex-function","description":"(anonymous) in xposed/src/main/kotlin/org/matrix/vector/impl/hooks/VectorInvocation.kt: complexity 38, 63 lines","ref":"xposed/src/main/kotlin/org/matrix/vector/impl/hooks/VectorInvocation.kt","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/xposed/src/main/kotlin/org/matrix/vector/impl/hooks/VectorInvocation.kt#L223","weight":0.6333333333333333},{"kind":"complex-function","description":"install in manager/src/main/kotlin/org/matrix/vector/manager/ui/components/PackageActionMenu.kt: complexity 28, 259 lines","ref":"manager/src/main/kotlin/org/matrix/vector/manager/ui/components/PackageActionMenu.kt","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/manager/src/main/kotlin/org/matrix/vector/manager/ui/components/PackageActionMenu.kt#L278","weight":0.4666666666666667},{"kind":"complex-function","description":"vector::native::ElfImage::findModuleBase in native/src/elf/elf_image.cpp: complexity 25, 87 lines","ref":"native/src/elf/elf_image.cpp","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/native/src/elf/elf_image.cpp#L395","weight":0.4166666666666667},{"kind":"complex-function","description":"Java_org_matrix_vector_daemon_env_Dex2OatServer_doMountNative in daemon/src/main/jni/dex2oat.cpp: complexity 23, 57 lines","ref":"daemon/src/main/jni/dex2oat.cpp","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/daemon/src/main/jni/dex2oat.cpp#L23","weight":0.38333333333333336},{"kind":"complex-function","description":"parseEntry in manager/src/main/kotlin/org/matrix/vector/manager/data/log/LogFormat.kt: complexity 21, 42 lines","ref":"manager/src/main/kotlin/org/matrix/vector/manager/data/log/LogFormat.kt","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/manager/src/main/kotlin/org/matrix/vector/manager/data/log/LogFormat.kt#L117","weight":0.35},{"kind":"complex-function","description":"vector::native::ElfImage::parseHeaders in native/src/elf/elf_image.cpp: complexity 21, 59 lines","ref":"native/src/elf/elf_image.cpp","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/native/src/elf/elf_image.cpp#L89","weight":0.35},{"kind":"complex-function","description":"dispatchModuleScope in daemon/src/main/kotlin/org/matrix/vector/daemon/VectorService.kt: complexity 20, 66 lines","ref":"daemon/src/main/kotlin/org/matrix/vector/daemon/VectorService.kt","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/daemon/src/main/kotlin/org/matrix/vector/daemon/VectorService.kt#L425","weight":0.3333333333333333},{"kind":"complex-function","description":"PanelItem in manager-ui/src/main/kotlin/org/matrix/vector/ui/navigation/PanelBar.kt: complexity 20, 139 lines","ref":"manager-ui/src/main/kotlin/org/matrix/vector/ui/navigation/PanelBar.kt","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/manager-ui/src/main/kotlin/org/matrix/vector/ui/navigation/PanelBar.kt#L163","weight":0.3333333333333333}],"data":{},"error":null},{"analyzer":"qual-duplication","pillar":"quality","status":"ok","tool_version":"repotrust-dup-w6","metrics":{"compared_lines":43095.0,"duplicated_lines":1244.0,"duplicated_share":0.0289,"files":376.0},"findings":[],"evidence":[{"kind":"duplicate-code","description":"6+ duplicated lines: daemon/build.gradle.kts:17 and zygisk/build.gradle.kts:25","ref":"daemon/build.gradle.kts","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/daemon/build.gradle.kts#L17","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: daemon/src/main/jni/logging.h:9 and dex2oat/src/main/cpp/include/logging.h:8","ref":"daemon/src/main/jni/logging.h","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/daemon/src/main/jni/logging.h#L9","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: daemon/src/main/kotlin/org/matrix/vector/daemon/Cli.kt:379 and daemon/src/main/kotlin/org/matrix/vector/daemon/Cli.kt:393","ref":"daemon/src/main/kotlin/org/matrix/vector/daemon/Cli.kt","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/daemon/src/main/kotlin/org/matrix/vector/daemon/Cli.kt#L379","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: daemon/src/main/kotlin/org/matrix/vector/daemon/system/SystemExtensions.kt:311 and daemon/src/main/kotlin/org/matrix/vector/daemon/system/SystemExtensions.kt:312","ref":"daemon/src/main/kotlin/org/matrix/vector/daemon/system/SystemExtensions.kt","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/daemon/src/main/kotlin/org/matrix/vector/daemon/system/SystemExtensions.kt#L311","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: daemon/src/main/kotlin/org/matrix/vector/daemon/utils/Workarounds.kt:89 and daemon/src/main/kotlin/org/matrix/vector/daemon/utils/Workarounds.kt:99","ref":"daemon/src/main/kotlin/org/matrix/vector/daemon/utils/Workarounds.kt","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/daemon/src/main/kotlin/org/matrix/vector/daemon/utils/Workarounds.kt#L89","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: dex2oat/src/main/cpp/include/base_macros.h:2 and hiddenapi/stubs/src/main/java/androidx/annotation/IntRange.java:2","ref":"dex2oat/src/main/cpp/include/base_macros.h","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/dex2oat/src/main/cpp/include/base_macros.h#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: dex2oat/src/main/cpp/include/base_macros.h:4 and dex2oat/src/main/cpp/include/macros.h:4","ref":"dex2oat/src/main/cpp/include/base_macros.h","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/dex2oat/src/main/cpp/include/base_macros.h#L4","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: external/apache/build.gradle.kts:1 and external/axml/build.gradle.kts:1","ref":"external/apache/build.gradle.kts","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/external/apache/build.gradle.kts#L1","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: hiddenapi/stubs/src/main/java/android/annotation/NonNull.java:2 and hiddenapi/stubs/src/main/java/android/annotation/Nullable.java:2","ref":"hiddenapi/stubs/src/main/java/android/annotation/NonNull.java","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/hiddenapi/stubs/src/main/java/android/annotation/NonNull.java#L2","weight":0.3},{"kind":"duplicate-code","description":"6+ duplicated lines: legacy/src/main/java/android/content/res/XResources.java:722 and legacy/src/main/java/android/content/res/XResources.java:1364","ref":"legacy/src/main/java/android/content/res/XResources.java","url":"https://github.com/JingMatrix/Vector/blob/91e77e439619bdee53c106ba9c82b9e08051c3e9/legacy/src/main/java/android/content/res/XResources.java#L722","weight":0.3}],"data":{},"error":null},{"analyzer":"qual-lint","pillar":"quality","status":"ok","tool_version":"opengrep 1.33.1; rules f1d2b562b414","metrics":{"findings":2.0,"weighted_findings":0.5,"scanned_lines":65678.0,"category:correctness":2.0},"findings":[{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"zygisk/module/customize.sh","line":37,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:zygisk/module/customize.sh:37"},{"rule_id":"opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command","severity":"low","message":"Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may use a variable that starts with an underscore e.g. $_X instead of ","path":"zygisk/module/customize.sh","line":40,"fingerprint":"bash.lang.correctness.unquoted-variable-expansion-in-command:zygisk/module/customize.sh:40"}],"evidence":[],"data":{},"error":null},{"analyzer":"qual-testing","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:has_tests":0.0,"check:test_ratio":0.0,"check:ci_present":1.0,"check:ci_runs_tests":0.0,"check:ci_runs_lint":0.0,"check:tests_cochange":0.0,"test_lines":0.0,"source_lines":65678.0,"test_ratio":0.0,"ci_files":2.0,"cochange_share":0.0,"cochange_commits":209.0},"findings":[],"evidence":[{"kind":"ci","description":"CI config: .github/workflows/core.yml","ref":".github/workflows/core.yml","url":null,"weight":0.0},{"kind":"ci","description":"CI config: .github/workflows/crowdin.yml","ref":".github/workflows/crowdin.yml","url":null,"weight":0.0}],"data":{"test_commands":[],"lint_commands":[]},"error":null},{"analyzer":"qual-docs","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:readme":1.0,"check:license":1.0,"check:contributing":0.0,"check:changelog":0.0,"readme_lines":82.0},"findings":[],"evidence":[{"kind":"docs","description":"README.md","ref":"README.md","url":null,"weight":0.0},{"kind":"docs","description":"LICENSE","ref":"LICENSE","url":null,"weight":0.0}],"data":{},"error":null},{"analyzer":"qual-type-safety","pillar":"quality","status":"ok","tool_version":null,"metrics":{"check:strict_config":0.0,"check:low_escape_density":1.0,"escapes":0.0,"escapes_per_kloc":0.0},"findings":[],"evidence":[],"data":{},"error":null},{"analyzer":"x-blame","pillar":"ai_provenance","status":"ok","tool_version":"git-blame","metrics":{"ai_lines":75.0,"other_lines":65603.0,"files_blamed":376.0,"blame_failures":0.0,"quality:ai_findings":0.0,"quality:ai_per_kloc":0.0,"quality:other_findings":2.0,"quality:other_per_kloc":0.03,"security:ai_findings":0.0,"security:ai_per_kloc":0.0,"security:other_findings":4.0,"security:other_per_kloc":0.061},"findings":[],"evidence":[],"data":{"sampled":false,"comparable":false},"error":null}],"flags":[]}