MVT (Mobile Verification Toolkit) helps with conducting forensics of mobile devices in order to find signs of a potential compromise.
This report summarizes scanner evidence for mvt-project/mvt, a Python project with 15,297 GitHub stars. SynthScan examined 42,531 lines of code across 313 source files, recording 757 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 24.1 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 561 finding(s).
Are imports declared and package/API names verified? 36 finding(s).
Are wrappers, guards, and repeated structures necessary? 622 finding(s).
Which changes need focused human review? 757 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 757 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_check_android_androidqf.py | 27 | def test_log_timestamps_module_is_registered(self): | CODE |
| LOW | tests/test_check_android_androidqf.py | 36 | def test_check_stores_nested_sms_urls(self, tmp_path): | CODE |
| LOW | tests/test_check_android_androidqf.py | 54 | def test_acquisition_context_is_passed_to_bugreport(self, tmp_path, mocker): | CODE |
| LOW | tests/test_check_android_androidqf.py | 85 | def test_acquisition_context_falls_back_to_public_key_file(self, tmp_path): | CODE |
| LOW | tests/test_check_android_androidqf.py | 97 | def test_check_encrypted_backup_prompt_valid(self, mocker): | CODE |
| LOW | tests/test_check_android_androidqf.py | 113 | def test_check_encrypted_backup_cli(self, mocker): | CODE |
| LOW | tests/test_check_android_androidqf.py | 129 | def test_check_encrypted_backup_env(self, mocker): | CODE |
| LOW | tests/test_check_android_androidqf.py | 148 | def test_check_malformed_backup_skips_backup_modules(self, tmp_path, caplog): | CODE |
| LOW | tests/test_check_android_androidqf.py | 163 | def test_intrusion_log_zip_rejects_path_traversal(self, tmp_path, mocker, caplog): | CODE |
| LOW | tests/test_check_android_adb_removed.py | 12 | def test_check_adb_exits_nonzero(self): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 29 | def _create_sysdiagnose_folder(tmp_path): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 41 | def _create_sysdiagnose_archive(tmp_path, folder): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 62 | def test_check_sysdiagnose_from_folder(tmp_path): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 74 | def test_check_sysdiagnose_from_archive_closes_archive(tmp_path): | CODE |
| LOW | tests/test_cmd_check_sysdiagnose.py | 91 | def test_archive_is_extracted_once_and_unsafe_members_are_skipped(tmp_path): | CODE |
| LOW | tests/test_ios_versions.py | 10 | def test_is_ios_version_outdated(self): | CODE |
| LOW | tests/test_cli_entry_points.py | 80 | def _install_fixture_entry_point(monkeypatch, entry_point_group, command): | STRING |
| LOW | tests/test_cli_entry_points.py | 111 | def test_main_registers_installed_plugins_before_running_the_cli( | CODE |
| LOW | tests/test_cli_entry_points.py | 132 | def test_main_completes_plugin_command_names( | CODE |
| LOW | tests/test_cli_entry_points.py | 155 | def test_main_still_loads_commands_from_a_file( | CODE |
| LOW | tests/test_cli_entry_points.py | 178 | def test_main_loads_commands_from_the_environment_variable( | CODE |
| LOW | tests/test_cli_entry_points.py | 197 | def test_main_ignores_the_entry_point_groups_of_the_other_programs( | CODE |
| LOW | tests/test_cli_entry_points.py | 216 | def test_the_console_script_targets_are_importable(): | CODE |
| LOW | tests/test_cli_entry_points.py | 223 | def test_importing_mvt_does_not_import_a_cli(tmp_path): | CODE |
| LOW | tests/test_cli_entry_points.py | 237 | def test_importing_mvt_does_not_run_installed_plugins(tmp_path): | CODE |
| LOW | tests/test_cli_entry_points.py | 255 | def test_registering_the_plugins_runs_the_entry_point(tmp_path): | CODE |
| LOW | tests/test_check_ios_sysdiagnose.py | 30 | def _create_sysdiagnose_folder(tmp_path): | STRING |
| LOW | tests/test_check_ios_sysdiagnose.py | 37 | def test_check_sysdiagnose_runs_explicitly_scoped_custom_module(tmp_path): | STRING |
| LOW | tests/test_check_ios_sysdiagnose.py | 57 | def test_check_sysdiagnose_warns_without_a_custom_module(tmp_path, caplog): | STRING |
| LOW | tests/test_check_ios_sysdiagnose.py | 69 | def _create_truncated_sysdiagnose_archive(tmp_path): | STRING |
| LOW | tests/test_check_ios_sysdiagnose.py | 81 | def test_check_sysdiagnose_reports_a_truncated_archive(tmp_path, caplog): | STRING |
| LOW | tests/plugin_fixtures.py | 26 | def write_cli_plugin_distribution( | CODE |
| LOW | tests/utils.py | 29 | def get_android_backup_folder(): | CODE |
| LOW | tests/utils.py | 41 | def add_backup_manifest_entry(backup_path, file_id, domain, relative_path): | CODE |
| LOW⚡ | tests/test_check_ios_backup.py | 22 | def test_check_logs_the_backup_path_to_the_command_log(self, tmp_path): | CODE |
| LOW⚡ | tests/test_check_ios_backup.py | 30 | def test_check_finds_backup_in_subfolder(self, tmp_path, caplog): | CODE |
| LOW⚡ | tests/test_check_ios_backup.py | 39 | def test_check_rejects_non_backup_folder(self, tmp_path, caplog): | CODE |
| LOW | tests/test_cli_startup.py | 19 | def test_importing_a_cli_does_not_import_the_module_machinery(cli_module, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 40 | def test_verbose_before_the_command_name_turns_on_debug(self, program): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 49 | def test_a_run_without_verbose_goes_back_to_info(self, program): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 58 | def test_mvt_verbose_without_a_command_prints_the_help(self): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 67 | def test_ios_command_default_does_not_undo_the_cli_choice(self, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 76 | def test_ios_verbose_after_the_command_name_still_works(self, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 85 | def test_android_command_default_does_not_undo_the_cli_choice(self, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 94 | def test_android_verbose_after_the_command_name_still_works(self, tmp_path): | CODE |
| LOW⚡ | tests/test_cli_verbose.py | 103 | def test_the_command_option_says_it_is_kept_for_compatibility(self): | CODE |
| LOW⚡ | tests/test_cli.py | 17 | def test_running_mvt_alone_shows_the_logo_and_the_commands(self): | CODE |
| LOW⚡ | tests/test_cli.py | 26 | def test_help_reminds_where_the_analysis_runs(self): | CODE |
| LOW⚡ | tests/test_cli.py | 33 | def test_version_prints_the_installed_version(self): | CODE |
| LOW⚡ | tests/test_cli.py | 39 | def test_download_iocs_updates_the_indicators(self, monkeypatch): | CODE |
| LOW | tests/test_check_android_backup.py | 20 | def test_check_encrypted_backup_prompt_valid(self, mocker): | CODE |
| LOW | tests/test_check_android_backup.py | 33 | def test_check_encrypted_backup_cli(self, mocker): | CODE |
| LOW | tests/test_check_android_backup.py | 49 | def test_check_encrypted_backup_cli_invalid(self, mocker, caplog): | CODE |
| LOW | tests/test_check_android_backup.py | 62 | def test_check_encrypted_backup_env(self, mocker): | CODE |
| LOW | tests/test_completion.py | 14 | def test_completion_prints_instructions_by_default(self): | CODE |
| LOW | tests/test_completion.py | 23 | def test_completion_bash_script_covers_every_cli(self): | CODE |
| LOW | tests/test_completion.py | 34 | def test_completion_fish_script_covers_every_cli(self): | CODE |
| LOW | tests/test_completion.py | 44 | def test_completion_install_updates_bashrc_once(self, tmp_path, monkeypatch): | CODE |
| LOW | tests/test_completion.py | 67 | def test_completion_install_fish_does_not_update_shell_rc( | CODE |
| LOW | tests/test_completion.py | 87 | def test_completion_install_without_shell_is_a_usage_error(self): | CODE |
| 392 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/mvt/cli.py | 32 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/cli.py | 34 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 67 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 69 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 76 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 78 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 82 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/cli.py | 84 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/cli.py | 95 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/cli.py | 97 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 91 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 93 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 121 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 123 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 129 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 131 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 211 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 213 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 255 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 257 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 326 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 328 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 392 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 394 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 467 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/ios/cli.py | 469 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 516 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 518 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 527 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/ios/cli.py | 529 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 79 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 81 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 109 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 111 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 117 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 119 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 129 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 131 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 211 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 213 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 282 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 284 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 364 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 366 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 443 | # ============================================================================== | COMMENT |
| MEDIUM | src/mvt/android/cli.py | 445 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 492 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 494 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 503 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/cli.py | 505 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 330 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 332 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 342 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 344 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 389 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/mvt/android/modules/intrusion_logs/base.py | 391 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/mvt/android/modules/intrusion_logs/base.py | 71 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/mvt/android/modules/intrusion_logs/base.py | 73 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/mvt/android/modules/intrusion_logs/base.py | 84 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/mvt/android/modules/intrusion_logs/base.py | 86 | # ------------------------------------------------------------------ | COMMENT |
| 4 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/android_androidqf/test_mounts.py | 63 | except Exception: | CODE |
| LOW | src/mvt/ios/decrypt.py | 249 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/decrypt.py | 323 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/decrypt.py | 391 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/decrypt.py | 449 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/decrypt.py | 481 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/modules/base.py | 140 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/base.py | 194 | except Exception as exc: | CODE |
| MEDIUM | src/mvt/ios/modules/base.py | 29 | def close(self) -> None: | CODE |
| LOW | …c/mvt/ios/modules/mixed/webkit_session_resource_log.py | 154 | except Exception: | CODE |
| LOW | …c/mvt/ios/modules/mixed/webkit_session_resource_log.py | 161 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/mixed/safari_history.py | 80 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/mixed/safari_history.py | 93 | except Exception: | CODE |
| LOW | …t/ios/modules/mixed/webkit_resource_load_statistics.py | 161 | except Exception as exc: | CODE |
| LOW | src/mvt/ios/modules/backup/manifest.py | 116 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/backup/manifest.py | 208 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/backup/configuration_profiles.py | 142 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/fs/filesystem.py | 90 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/fs/filesystem.py | 104 | except Exception: | CODE |
| LOW | src/mvt/ios/modules/fs/shutdownlog.py | 113 | except Exception: | CODE |
| LOW | src/mvt/common/alerts.py | 65 | except Exception: | CODE |
| LOW | src/mvt/common/command.py | 104 | except Exception as exc: | CODE |
| LOW⚡ | src/mvt/common/cmd_plugins.py | 46 | except Exception as exc: | CODE |
| LOW⚡ | src/mvt/common/cmd_plugins.py | 59 | except Exception: | CODE |
| LOW⚡ | src/mvt/common/cmd_plugins.py | 66 | except Exception: | CODE |
| LOW | src/mvt/common/log.py | 64 | except Exception: | CODE |
| LOW | src/mvt/common/updates.py | 79 | except Exception as exc: | CODE |
| LOW | src/mvt/common/updates.py | 95 | except Exception: | CODE |
| LOW | src/mvt/common/updates.py | 133 | except Exception as e: | CODE |
| LOW | src/mvt/common/updates.py | 219 | except Exception as e: | CODE |
| LOW | src/mvt/common/updates.py | 245 | except Exception: | CODE |
| LOW | src/mvt/common/updates.py | 310 | except Exception as e: | CODE |
| LOW | src/mvt/common/updates.py | 423 | except Exception as e: | CODE |
| MEDIUM | src/mvt/common/updates.py | 52 | def check(self) -> str: | CODE |
| LOW | src/mvt/common/indicators.py | 458 | except Exception: | CODE |
| LOW | src/mvt/common/logo.py | 30 | except Exception as e: | CODE |
| LOW | src/mvt/common/logo.py | 70 | except Exception as e: | CODE |
| LOW | src/mvt/common/logo.py | 124 | except Exception as e: | CODE |
| LOW⚡ | src/mvt/common/cli_plugins.py | 211 | except Exception: | CODE |
| LOW⚡ | src/mvt/common/cli_plugins.py | 221 | except Exception as exc: | CODE |
| LOW | src/mvt/common/utils.py | 99 | except Exception: | CODE |
| LOW | src/mvt/common/module.py | 161 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module.py | 249 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module.py | 263 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module.py | 278 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module.py | 289 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module_loader.py | 168 | except Exception as exc: | CODE |
| LOW | src/mvt/common/module_loader.py | 233 | except Exception: | CODE |
| LOW | src/mvt/common/module_loader.py | 261 | except Exception: | CODE |
| LOW | src/mvt/common/module_loader.py | 271 | except Exception: | CODE |
| LOW | src/mvt/common/module_loader.py | 294 | except Exception: | CODE |
| LOW | src/mvt/common/module_loader.py | 315 | except Exception as exc: | CODE |
| MEDIUM | src/mvt/common/module_loader.py | 268 | def _packages_distributions() -> dict[str, list[str]]: | CODE |
| LOW | src/mvt/android/cmd_check_bugreport.py | 169 | except Exception as exc: | CODE |
| LOW | src/mvt/android/cmd_check_androidqf.py | 208 | except Exception as exc: | CODE |
| LOW | src/mvt/android/cmd_check_intrusion_logs.py | 96 | except Exception as exc: | CODE |
| LOW | src/mvt/android/artifacts/tombstone_crashes.py | 187 | except Exception as e: | CODE |
| LOW | src/mvt/android/artifacts/tombstone_crashes.py | 266 | except Exception as e: | CODE |
| LOW | src/mvt/android/modules/bugreport/tombstones.py | 80 | except Exception as exc: | CODE |
| LOW | src/mvt/android/modules/androidqf/mounts.py | 57 | except Exception as exc: | CODE |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/mvt/cli.py | 0 | register the external commands and run the mvt-android cli. external commands are registered here rather than when this | STRING |
| HIGH | src/mvt/ios/cli.py | 0 | register the external commands and run the mvt-android cli. external commands are registered here rather than when this | STRING |
| HIGH | src/mvt/android/cli.py | 0 | register the external commands and run the mvt-android cli. external commands are registered here rather than when this | STRING |
| HIGH | src/mvt/ios/modules/fs/webkit_safariviewservice.py | 0 | this module looks extracts records from webkit indexeddb folders, and checks them against any provided list of suspiciou | STRING |
| HIGH | src/mvt/ios/modules/fs/webkit_localstorage.py | 0 | this module looks extracts records from webkit indexeddb folders, and checks them against any provided list of suspiciou | STRING |
| HIGH | src/mvt/ios/modules/fs/webkit_indexeddb.py | 0 | this module looks extracts records from webkit indexeddb folders, and checks them against any provided list of suspiciou | STRING |
| HIGH | src/mvt/android/modules/bugreport/fs_timestamps.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | …mvt/android/modules/bugreport/dumpsys_battery_daily.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | src/mvt/android/modules/bugreport/dumpsys_dbinfo.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | …t/android/modules/bugreport/dumpsys_battery_history.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | src/mvt/android/modules/bugreport/tombstones.py | 0 | this module extracts records from battery daily updates. | STRING |
| HIGH | src/mvt/android/modules/bugreport/dumpsys_packages.py | 0 | this module extracts details on receivers for risky activities. | STRING |
| HIGH | src/mvt/android/modules/bugreport/dumpsys_activities.py | 0 | this module extracts details on receivers for risky activities. | STRING |
| HIGH | src/mvt/android/modules/bugreport/dumpsys_receivers.py | 0 | this module extracts details on receivers for risky activities. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/conftest.py | 39 | except KeyError: | CODE |
| HIGH | src/mvt/ios/modules/mixed/safari_browserstate.py | 139 | except plistlib.InvalidFileException: | CODE |
| HIGH | src/mvt/common/alerts.py | 65 | except Exception: | CODE |
| HIGH | src/mvt/common/command.py | 733 | except NotImplementedError: | CODE |
| HIGH | src/mvt/common/command.py | 786 | except NotImplementedError: | CODE |
| HIGH | src/mvt/common/command.py | 766 | except NotImplementedError: | CODE |
| HIGH | src/mvt/common/module.py | 287 | except NotImplementedError: | CODE |
| HIGH | src/mvt/common/module_loader.py | 261 | except Exception: | CODE |
| HIGH | src/mvt/common/module_loader.py | 294 | except Exception: | CODE |
| HIGH | src/mvt/android/artifacts/dumpsys_battery_history.py | 41 | except ValueError: | CODE |
| HIGH | src/mvt/android/parsers/backup.py | 59 | except (UnicodeDecodeError, ValueError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mvt/ios/decrypt.py | 271 | CODE | |
| LOW | src/mvt/ios/cmd_check_sysdiagnose.py | 80 | CODE | |
| LOW | src/mvt/ios/modules/net_base.py | 184 | CODE | |
| LOW | src/mvt/ios/modules/base.py | 146 | CODE | |
| LOW | src/mvt/ios/modules/base.py | 219 | CODE | |
| LOW | src/mvt/ios/modules/base.py | 278 | CODE | |
| LOW | src/mvt/ios/modules/mixed/whatsapp_contacts.py | 201 | CODE | |
| LOW | …c/mvt/ios/modules/mixed/webkit_session_resource_log.py | 69 | CODE | |
| LOW | …c/mvt/ios/modules/mixed/webkit_session_resource_log.py | 185 | CODE | |
| LOW | src/mvt/ios/modules/mixed/safari_history.py | 170 | CODE | |
| LOW | src/mvt/ios/modules/mixed/interactionc.py | 473 | CODE | |
| LOW | src/mvt/ios/modules/mixed/interactionc.py | 502 | CODE | |
| LOW | src/mvt/ios/modules/mixed/calendar.py | 87 | CODE | |
| LOW | src/mvt/ios/modules/mixed/safari_browserstate.py | 67 | CODE | |
| LOW | src/mvt/ios/modules/mixed/safari_browserstate.py | 94 | CODE | |
| LOW | src/mvt/ios/modules/mixed/safari_browserstate.py | 182 | CODE | |
| LOW | …t/ios/modules/mixed/webkit_resource_load_statistics.py | 75 | CODE | |
| LOW | …t/ios/modules/mixed/webkit_resource_load_statistics.py | 147 | CODE | |
| LOW | src/mvt/ios/modules/mixed/tcc.py | 103 | CODE | |
| LOW | src/mvt/ios/modules/fs/analytics.py | 85 | CODE | |
| LOW | src/mvt/ios/modules/fs/shutdownlog.py | 78 | CODE | |
| LOW | src/mvt/common/alerts.py | 40 | CODE | |
| LOW | src/mvt/common/alerts.py | 175 | CODE | |
| LOW | src/mvt/common/command.py | 566 | CODE | |
| LOW | src/mvt/common/log.py | 39 | CODE | |
| LOW | src/mvt/common/indicators.py | 64 | CODE | |
| LOW | src/mvt/common/indicators.py | 122 | CODE | |
| LOW | src/mvt/common/indicators.py | 225 | CODE | |
| LOW | src/mvt/common/utils.py | 205 | CODE | |
| LOW | src/mvt/common/password.py | 115 | CODE | |
| LOW | src/mvt/android/cmd_check_androidqf.py | 307 | CODE | |
| LOW | src/mvt/android/cmd_check_backup.py | 124 | CODE | |
| LOW | src/mvt/android/artifacts/tombstone_crashes.py | 168 | CODE | |
| LOW | src/mvt/android/artifacts/tombstone_crashes.py | 236 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_adb.py | 24 | CODE | |
| LOW | src/mvt/android/artifacts/mounts.py | 40 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_platform_compat.py | 28 | CODE | |
| LOW | src/mvt/android/artifacts/processes.py | 41 | CODE | |
| LOW | src/mvt/android/artifacts/settings.py | 142 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_appops.py | 44 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_appops.py | 87 | CODE | |
| LOW | src/mvt/android/artifacts/dumpsys_receivers.py | 21 | CODE | |
| LOW | src/mvt/android/parsers/backup.py | 203 | CODE | |
| LOW | src/mvt/android/modules/bugreport/tombstones.py | 37 | CODE | |
| LOW | src/mvt/android/modules/androidqf/aqf_files.py | 85 | CODE | |
| LOW | src/mvt/android/modules/androidqf/aqf_files.py | 121 | CODE | |
| LOW | src/mvt/android/modules/androidqf/aqf_packages.py | 48 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/connect_event.py | 33 | CODE | |
| LOW | …c/mvt/android/modules/intrusion_logs/security_event.py | 309 | CODE | |
| LOW | …c/mvt/android/modules/intrusion_logs/security_event.py | 477 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/dns_event.py | 33 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/base.py | 123 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/base.py | 141 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/base.py | 161 | CODE | |
| LOW | src/mvt/android/modules/intrusion_logs/base.py | 251 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mvt/plugin.py | 12 | CODE | |
| LOW | src/mvt/plugin.py | 13 | CODE | |
| LOW | src/mvt/plugin.py | 14 | CODE | |
| LOW | src/mvt/plugin.py | 15 | CODE | |
| LOW | src/mvt/plugin.py | 15 | CODE | |
| LOW | src/mvt/plugin.py | 16 | CODE | |
| LOW | src/mvt/plugin.py | 17 | CODE | |
| LOW | src/mvt/plugin.py | 18 | CODE | |
| LOW | src/mvt/plugin.py | 18 | CODE | |
| LOW | src/mvt/plugin.py | 18 | CODE | |
| LOW | src/mvt/plugin.py | 19 | CODE | |
| LOW | src/mvt/plugin.py | 20 | CODE | |
| LOW | src/mvt/plugin.py | 20 | CODE | |
| LOW | src/mvt/plugin.py | 20 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 25 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 32 | CODE | |
| LOW | src/mvt/plugin.py | 40 | CODE | |
| LOW | src/mvt/plugin.py | 41 | CODE | |
| LOW | src/mvt/plugin.py | 42 | CODE | |
| LOW | src/mvt/ios/__init__.py | 6 | CODE | |
| LOW | src/mvt/ios/__init__.py | 6 | CODE | |
| LOW | src/mvt/ios/modules/sysdiagnose/__init__.py | 8 | CODE | |
| LOW | src/mvt/android/__init__.py | 6 | CODE | |
| LOW | src/mvt/android/__init__.py | 6 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/artifacts/android_data/dumpsys_battery.txt | 21 | Discharge screen off time: 9d 21h 51m 40s 100ms (from 2 steps) | COMMENT |
| LOW | tests/artifacts/androidqf/dumpsys.txt | 341 | #0: +2h21m35s4ms to 75 (screen-off, power-save-off) | COMMENT |
| LOW | tests/ios_sysdiagnose/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/ios_fs/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/common/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/android/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/ios_backup/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | tests/android_androidqf/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/ios/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/ios/modules/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/common/module_types.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/common/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/android/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/android/artifacts/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/android/parsers/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| LOW | src/mvt/android/modules/__init__.py | 1 | # Mobile Verification Toolkit (MVT) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/mvt/ios/decrypt.py | 184 | """This class provides functions to decrypt an encrypted iTunes backup | STRING |
| MEDIUM | src/mvt/ios/modules/net_base.py | 23 | """This class provides a base for DataUsage and NetUsage extraction | STRING |
| MEDIUM | src/mvt/ios/modules/base.py | 39 | """This class provides a base for all iOS filesystem/backup extraction | STRING |
| MEDIUM | src/mvt/ios/modules/fs/webkit_base.py | 14 | """This class is a base for other WebKit-related modules.""" | STRING |
| MEDIUM | src/mvt/common/indicators.py | 46 | """This class is used to parse indicators from a STIX2 file and provide | STRING |
| MEDIUM | src/mvt/common/indicators.py | 422 | # Create an Aho-Corasick automaton from the list of urls | COMMENT |
| MEDIUM | src/mvt/common/cli_plugins.py | 18 | # This module is imported by every CLI at start-up, and by shell completion on | COMMENT |
| MEDIUM | src/mvt/common/module.py | 43 | """This class provides a base for all extraction modules.""" | STRING |
| MEDIUM | src/mvt/android/cmd_check_bugreport.py | 69 | """This method is used to initialize the bug report analysis from an | STRING |
| MEDIUM | src/mvt/android/cmd_check_bugreport.py | 81 | """This method is used to initialize the bug report analysis from a | STRING |
| MEDIUM | src/mvt/android/modules/bugreport/base.py | 28 | """This class provides a base for all Android Bug Report modules.""" | STRING |
| MEDIUM | src/mvt/android/modules/androidqf/base.py | 17 | """This class provides a base for all Android Data analysis modules.""" | STRING |
| MEDIUM | src/mvt/android/modules/backup/base.py | 16 | """This class provides a base for all backup extractios modules""" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mvt/ios/versions.py | 45 | # Check if it is a build | COMMENT |
| LOW | src/mvt/ios/modules/mixed/interactionc.py | 353 | # Check if the record has the current timestamp. | COMMENT |
| LOW | src/mvt/ios/modules/mixed/interactionc.py | 357 | # Check if the timestamp was already processed. | COMMENT |
| LOW | src/mvt/common/alerts.py | 61 | # Check if it has a get_slug method (MVT modules have this) | COMMENT |
| LOW | src/mvt/android/artifacts/mounts.py | 93 | # Check if it's a system partition | COMMENT |
| LOW | src/mvt/android/artifacts/mounts.py | 98 | # Check if it's mounted read-write | COMMENT |
| LOW | src/mvt/android/artifacts/mounts.py | 235 | # Check if any mount points match indicators | COMMENT |
| LOW | src/mvt/android/artifacts/settings.py | 128 | # Check if one of the dangerous settings is using an unsafe | COMMENT |
| LOW | src/mvt/android/modules/androidqf/root_binaries.py | 105 | # Check if this matches a known root binary by exact name match | COMMENT |
| LOW | …c/mvt/android/modules/intrusion_logs/security_event.py | 378 | # Check if command contains any suspicious app IDs | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/conftest.py | 45 | CODE | |
| LOW | src/mvt/ios/cmd_check_fs.py | 20 | CODE | |
| LOW | src/mvt/ios/cmd_check_sysdiagnose.py | 27 | CODE | |
| LOW | src/mvt/ios/cmd_check_backup.py | 27 | CODE | |
| LOW | src/mvt/common/command.py | 40 | CODE | |
| LOW | src/mvt/common/cmd_check_iocs.py | 19 | CODE | |
| LOW | src/mvt/android/cmd_check_bugreport.py | 29 | CODE | |
| LOW | src/mvt/android/cmd_check_androidqf.py | 42 | CODE | |
| LOW | src/mvt/android/cmd_check_intrusion_logs.py | 26 | CODE | |
| LOW | src/mvt/android/cmd_check_backup.py | 36 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/android/test_artifact_settings.py | 138 | assert record["value"] == "{null}" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/mvt/plugin.py | 44 | __all__ = [ | CODE |
| LOW | src/mvt/common/updates.py | 202 | def set_latest_check(self) -> None: | CODE |
| LOW | src/mvt/common/updates.py | 262 | def set_findings(self, findings: list[dict]) -> None: | CODE |
| LOW | src/mvt/common/updates.py | 486 | def set_latest_check(self) -> None: | CODE |
| LOW | src/mvt/common/updates.py | 506 | def set_latest_update(self) -> None: | CODE |
| LOW | src/mvt/common/indicators.py | 26 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .safety-policy.yml | 4 | # Otherwise, you can use the flag `safety check --policy-file <path-to-this-file>` to specify a custom location and name | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/mvt/ios/modules/fs/analytics_ios_versions.py | 22 | """This module leverages the Analytics module in order to extract | STRING |
| LOW | src/mvt/common/indicators.py | 456 | # If it's not shortened, we just use the original URL object. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/artifacts/generate_stix.py | 18 | emails = ["foobar@example.org"] | CODE |
| LOW | tests/ios_backup/test_calendar.py | 41 | ind.ioc_collections[0]["emails"].append("user@example.org") | CODE |