troubadix 25.3.0__tar.gz → 25.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. {troubadix-25.3.0 → troubadix-25.3.2}/PKG-INFO +2 -1
  2. {troubadix-25.3.0 → troubadix-25.3.2}/pyproject.toml +3 -1
  3. troubadix-25.3.2/tests/standalone_plugins/nasl/21.04/21_script.nasl +6 -0
  4. troubadix-25.3.2/tests/standalone_plugins/nasl/22.04/22_script.nasl +6 -0
  5. troubadix-25.3.2/tests/standalone_plugins/nasl/common/bar.nasl +10 -0
  6. troubadix-25.3.2/tests/standalone_plugins/nasl/common/foo.nasl +8 -0
  7. troubadix-25.3.2/tests/standalone_plugins/nasl/common/foobar.nasl +7 -0
  8. troubadix-25.3.2/tests/standalone_plugins/nasl/common/gsf/enterprise_script.nasl +5 -0
  9. troubadix-25.3.2/tests/standalone_plugins/test_dependency_graph.py +201 -0
  10. {troubadix-25.3.0 → troubadix-25.3.2}/tests/test_naslinter.py +1 -0
  11. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/__version__.py +1 -1
  12. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/argparser.py +18 -0
  13. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/codespell/codespell.exclude +26 -2
  14. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/codespell/codespell.ignore +6 -2
  15. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/dependencies.py +15 -11
  16. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/grammar.py +1 -0
  17. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/spaces_before_dots.py +2 -2
  18. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/valid_oid.py +2 -2
  19. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_oid.py +2 -8
  20. troubadix-25.3.2/troubadix/standalone_plugins/dependency_graph/__init__.py +2 -0
  21. troubadix-25.3.2/troubadix/standalone_plugins/dependency_graph/checks.py +128 -0
  22. troubadix-25.3.2/troubadix/standalone_plugins/dependency_graph/cli.py +58 -0
  23. troubadix-25.3.2/troubadix/standalone_plugins/dependency_graph/dependency_graph.py +212 -0
  24. troubadix-25.3.2/troubadix/standalone_plugins/dependency_graph/models.py +40 -0
  25. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/deprecate_vts.py +3 -12
  26. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/file_extensions.py +3 -15
  27. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/last_modification.py +4 -12
  28. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/no_solution.py +2 -8
  29. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/version_updated.py +2 -8
  30. {troubadix-25.3.0 → troubadix-25.3.2}/LICENSE +0 -0
  31. {troubadix-25.3.0 → troubadix-25.3.2}/README.md +0 -0
  32. {troubadix-25.3.0 → troubadix-25.3.2}/tests/__init__.py +0 -0
  33. {troubadix-25.3.0 → troubadix-25.3.2}/tests/helper/__init__.py +0 -0
  34. {troubadix-25.3.0 → troubadix-25.3.2}/tests/helper/test_linguistic_exception_handler.py +0 -0
  35. {troubadix-25.3.0 → troubadix-25.3.2}/tests/helper/test_patterns.py +0 -0
  36. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/__init__.py +0 -0
  37. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/fail.nasl +0 -0
  38. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/fail2.nasl +0 -0
  39. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test.nasl +0 -0
  40. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_badwords.py +0 -0
  41. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_copyright_text.py +0 -0
  42. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_copyright_year.py +0 -0
  43. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_creation_date.py +0 -0
  44. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_cve_format.py +0 -0
  45. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_cvss_format.py +0 -0
  46. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_dependencies.py +0 -0
  47. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_dependency_category_order.py +0 -0
  48. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_deprecated_dependency.py +0 -0
  49. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_deprecated_functions.py +0 -0
  50. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_double_end_points.py +0 -0
  51. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_duplicate_oid.py +0 -0
  52. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_duplicated_script_tags.py +0 -0
  53. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_encoding.py +0 -0
  54. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/fail_bad_new_line.nasl +0 -0
  55. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/fail_badwords.nasl +0 -0
  56. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/fail_name_and_copyright_newline.nasl +0 -0
  57. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/fail_name_newline.nasl +0 -0
  58. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/fail_permissions.nasl +0 -0
  59. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/fail_spelling.nasl +0 -0
  60. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/fail.nasl +0 -0
  61. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/fail_badwords.nasl +0 -0
  62. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/fail_name_and_copyright_newline.nasl +0 -0
  63. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/fail_name_newline.nasl +0 -0
  64. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/fail_solution_template.nasl +0 -0
  65. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/runner/fail.nasl +0 -0
  66. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/runner/fail2.nasl +0 -0
  67. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/runner/test.nasl +0 -0
  68. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/runner/test_valid_oid.nasl +0 -0
  69. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/test.inc +0 -0
  70. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/21.04/test.nasl +0 -0
  71. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/nasl/warning.nasl +0 -0
  72. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/ok_permissions.nasl +0 -0
  73. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_files/test_oid.nasl +0 -0
  74. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_forking_nasl_functions.py +0 -0
  75. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_get_kb_on_services.py +0 -0
  76. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_grammar.py +0 -0
  77. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_http_links_in_tags.py +0 -0
  78. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_illegal_characters.py +0 -0
  79. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_log_messages.py +0 -0
  80. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_malformed_dependencies.py +0 -0
  81. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_misplaced_compare_in_if.py +0 -0
  82. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_missing_desc_exit.py +0 -0
  83. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_missing_tag_solution.py +0 -0
  84. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_multiple_re_parameters.py +0 -0
  85. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_newlines.py +0 -0
  86. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_overlong_description_lines.py +0 -0
  87. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_overlong_script_tags.py +0 -0
  88. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_prod_svc_detect_in_vulnvt.py +0 -0
  89. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_qod.py +0 -0
  90. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_reporting_consistency.py +0 -0
  91. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_add_preference_type.py +0 -0
  92. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_calls_empty_values.py +0 -0
  93. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_calls_recommended.py +0 -0
  94. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_category.py +0 -0
  95. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_copyright.py +0 -0
  96. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_family.py +0 -0
  97. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_tag_form.py +0 -0
  98. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_tag_whitespaces.py +0 -0
  99. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_tags_mandatory.py +0 -0
  100. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_version_and_last_modification_tags.py +0 -0
  101. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_xref_form.py +0 -0
  102. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_script_xref_url.py +0 -0
  103. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_security_messages.py +0 -0
  104. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_set_get_kb_calls.py +0 -0
  105. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_solution_text.py +0 -0
  106. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_solution_type.py +0 -0
  107. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_spaces_before_dots.py +0 -0
  108. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_spaces_in_filename.py +0 -0
  109. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_spelling.py +0 -0
  110. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_tabs.py +0 -0
  111. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_todo_tbd.py +0 -0
  112. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_trailing_spaces_tabs.py +0 -0
  113. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_using_display.py +0 -0
  114. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_valid_oid.py +0 -0
  115. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_valid_script_tag_names.py +0 -0
  116. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_variable_redefinition_in_foreach.py +0 -0
  117. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_vt_file_permissions.py +0 -0
  118. {troubadix-25.3.0 → troubadix-25.3.2}/tests/plugins/test_vt_placement.py +0 -0
  119. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/__init__.py +0 -0
  120. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/changed_packages/__init__.py +0 -0
  121. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/changed_packages/markers/__init__.py +0 -0
  122. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/changed_packages/markers/test_added_epoch.py +0 -0
  123. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/changed_packages/markers/test_added_release.py +0 -0
  124. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/changed_packages/markers/test_added_udeb.py +0 -0
  125. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/changed_packages/markers/test_changed_update.py +0 -0
  126. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/changed_packages/markers/test_dropped_architecture.py +0 -0
  127. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/changed_packages/test_changed_packages.py +0 -0
  128. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/changed_packages/test_package.py +0 -0
  129. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/test_changed_cves.py +0 -0
  130. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/test_changed_oid.py +0 -0
  131. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/test_deprecate_vts.py +0 -0
  132. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/test_file_extensions.py +0 -0
  133. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/test_last_modification.py +0 -0
  134. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/test_no_solution.py +0 -0
  135. {troubadix-25.3.0 → troubadix-25.3.2}/tests/standalone_plugins/test_version_updated.py +0 -0
  136. {troubadix-25.3.0 → troubadix-25.3.2}/tests/test_argparser.py +0 -0
  137. {troubadix-25.3.0 → troubadix-25.3.2}/tests/test_helper.py +0 -0
  138. {troubadix-25.3.0 → troubadix-25.3.2}/tests/test_reporter.py +0 -0
  139. {troubadix-25.3.0 → troubadix-25.3.2}/tests/test_results.py +0 -0
  140. {troubadix-25.3.0 → troubadix-25.3.2}/tests/test_runner.py +0 -0
  141. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/__init__.py +0 -0
  142. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/codespell/codespell.additions +0 -0
  143. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/helper/__init__.py +0 -0
  144. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/helper/helper.py +0 -0
  145. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/helper/linguistic_exception_handler.py +0 -0
  146. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/helper/patterns.py +0 -0
  147. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugin.py +0 -0
  148. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/__init__.py +0 -0
  149. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/badwords.py +0 -0
  150. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/copyright_text.py +0 -0
  151. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/copyright_year.py +0 -0
  152. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/creation_date.py +0 -0
  153. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/cve_format.py +0 -0
  154. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/cvss_format.py +0 -0
  155. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/dependency_category_order.py +0 -0
  156. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/deprecated_dependency.py +0 -0
  157. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/deprecated_functions.py +0 -0
  158. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/double_end_points.py +0 -0
  159. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/duplicate_oid.py +0 -0
  160. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/duplicated_script_tags.py +0 -0
  161. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/encoding.py +0 -0
  162. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/forking_nasl_functions.py +0 -0
  163. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/get_kb_on_services.py +0 -0
  164. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/http_links_in_tags.py +0 -0
  165. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/illegal_characters.py +0 -0
  166. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/log_messages.py +0 -0
  167. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/malformed_dependencies.py +0 -0
  168. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/misplaced_compare_in_if.py +0 -0
  169. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/missing_desc_exit.py +0 -0
  170. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/missing_tag_solution.py +0 -0
  171. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/multiple_re_parameters.py +0 -0
  172. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/newlines.py +0 -0
  173. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/overlong_description_lines.py +0 -0
  174. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/overlong_script_tags.py +0 -0
  175. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/prod_svc_detect_in_vulnvt.py +0 -0
  176. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/qod.py +0 -0
  177. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/reporting_consistency.py +0 -0
  178. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_add_preference_type.py +0 -0
  179. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_calls_empty_values.py +0 -0
  180. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_calls_recommended.py +0 -0
  181. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_category.py +0 -0
  182. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_copyright.py +0 -0
  183. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_family.py +0 -0
  184. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_tag_form.py +0 -0
  185. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_tag_whitespaces.py +0 -0
  186. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_tags_mandatory.py +0 -0
  187. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_version_and_last_modification_tags.py +0 -0
  188. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_xref_form.py +0 -0
  189. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/script_xref_url.py +0 -0
  190. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/security_messages.py +0 -0
  191. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/set_get_kb_calls.py +0 -0
  192. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/solution_text.py +0 -0
  193. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/solution_type.py +0 -0
  194. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/spaces_in_filename.py +0 -0
  195. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/spelling.py +0 -0
  196. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/tabs.py +0 -0
  197. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/todo_tbd.py +0 -0
  198. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/trailing_spaces_tabs.py +0 -0
  199. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/using_display.py +0 -0
  200. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/valid_script_tag_names.py +0 -0
  201. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/variable_assigned_in_if.py +0 -0
  202. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/variable_redefinition_in_foreach.py +0 -0
  203. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/vt_file_permissions.py +0 -0
  204. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/plugins/vt_placement.py +0 -0
  205. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/reporter.py +0 -0
  206. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/results.py +0 -0
  207. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/runner.py +0 -0
  208. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/__init__.py +0 -0
  209. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/allowed_rev_diff.py +0 -0
  210. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_cves.py +0 -0
  211. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_packages/changed_packages.py +0 -0
  212. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_packages/marker/__init__.py +0 -0
  213. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_packages/marker/added_epoch.py +0 -0
  214. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_packages/marker/added_release.py +0 -0
  215. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_packages/marker/added_udeb.py +0 -0
  216. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_packages/marker/changed_update.py +0 -0
  217. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_packages/marker/dropped_architecture.py +0 -0
  218. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_packages/marker/marker.py +0 -0
  219. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/changed_packages/package.py +0 -0
  220. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/standalone_plugins/common.py +0 -0
  221. {troubadix-25.3.0 → troubadix-25.3.2}/troubadix/troubadix.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: troubadix
3
- Version: 25.3.0
3
+ Version: 25.3.2
4
4
  Summary: A linting and QA check tool for NASL files
5
5
  License: GPL-3.0-or-later
6
6
  Author: Greenbone
@@ -21,6 +21,7 @@ Requires-Dist: chardet (>=4,<6)
21
21
  Requires-Dist: charset-normalizer (>=3.2.0,<4.0.0)
22
22
  Requires-Dist: codespell (==2.4.1)
23
23
  Requires-Dist: gitpython (>=3.1.31,<4.0.0)
24
+ Requires-Dist: networkx (>=3.4.2,<4.0.0)
24
25
  Requires-Dist: pontos (>=22.7,<26.0)
25
26
  Requires-Dist: python-magic (>=0.4.25,<0.5.0)
26
27
  Requires-Dist: validators (>=0.34.0,<0.35.0)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "troubadix"
3
- version = "25.3.0"
3
+ version = "25.3.2"
4
4
  description = "A linting and QA check tool for NASL files"
5
5
  authors = ["Greenbone <info@greenbone.net>"]
6
6
  license = "GPL-3.0-or-later"
@@ -32,6 +32,7 @@ chardet = ">=4,<6"
32
32
  validators = "^0.34.0"
33
33
  gitpython = "^3.1.31"
34
34
  charset-normalizer = "^3.2.0"
35
+ networkx = "^3.4.2"
35
36
 
36
37
  [tool.poetry.group.dev.dependencies]
37
38
  autohooks = ">=21.7.0"
@@ -81,6 +82,7 @@ troubadix-changed-cves = 'troubadix.standalone_plugins.changed_cves:main'
81
82
  troubadix-allowed-rev-diff = 'troubadix.standalone_plugins.allowed_rev_diff:main'
82
83
  troubadix-file-extensions = 'troubadix.standalone_plugins.file_extensions:main'
83
84
  troubadix-deprecate-vts = 'troubadix.standalone_plugins.deprecate_vts:main'
85
+ troubadix-dependency-graph = 'troubadix.standalone_plugins.dependency_graph.dependency_graph:main'
84
86
 
85
87
  [build-system]
86
88
  requires = ["poetry-core>=1.0.0"]
@@ -0,0 +1,6 @@
1
+ if(description)
2
+ {
3
+ script_category(ACT_GATHER_INFO);
4
+ script_dependencies( "foo.nasl" );
5
+ exit(0);
6
+ }
@@ -0,0 +1,6 @@
1
+ if(description)
2
+ {
3
+ script_category(ACT_GATHER_INFO);
4
+ script_dependencies( "foo.nasl" );
5
+ exit(0);
6
+ }
@@ -0,0 +1,10 @@
1
+ if(description)
2
+ {
3
+ script_category(ACT_GATHER_INFO);
4
+ script_dependencies( "foo.nasl", "foo.nasl" );
5
+
6
+ if(FEED_NAME == "GSF" || FEED_NAME == "GEF" || FEED_NAME == "SCM")
7
+ script_dependencies("gsf/enterprise_script.nasl");
8
+
9
+ exit(0);
10
+ }
@@ -0,0 +1,8 @@
1
+ if(description)
2
+ {
3
+ script_category(ACT_ATTACK);
4
+ script_dependencies( "foobar.nasl", "gsf/enterprise_script.nasl" );
5
+ exit(0);
6
+ }
7
+
8
+ script_dependencies( "missing.nasl" );
@@ -0,0 +1,7 @@
1
+ if(description)
2
+ {
3
+ script_category(ACT_GATHER_INFO);
4
+ script_dependencies( "bar.nasl" );
5
+ exit(0);
6
+ script_tag(name:"deprecated", value:TRUE);
7
+ }
@@ -0,0 +1,5 @@
1
+ if(description)
2
+ {
3
+ script_category(ACT_GATHER_INFO);
4
+ exit(0);
5
+ }
@@ -0,0 +1,201 @@
1
+ # SPDX-License-Identifier: GPL-3.0-or-later
2
+ # SPDX-FileCopyrightText: 2024 Greenbone AG
3
+ import os
4
+ import unittest
5
+ from io import StringIO
6
+ from pathlib import Path
7
+ from unittest.mock import patch
8
+
9
+ from troubadix.plugins.dependency_category_order import VTCategory
10
+ from troubadix.standalone_plugins.dependency_graph.cli import parse_args
11
+ from troubadix.standalone_plugins.dependency_graph.dependency_graph import (
12
+ Reporter,
13
+ create_graph,
14
+ determine_feed,
15
+ extract_category,
16
+ extract_dependencies,
17
+ get_feed,
18
+ get_scripts,
19
+ main,
20
+ )
21
+ from troubadix.standalone_plugins.dependency_graph.models import (
22
+ Dependency,
23
+ Feed,
24
+ Result,
25
+ Script,
26
+ )
27
+
28
+
29
+ class TestReporter(unittest.TestCase):
30
+ def setUp(self):
31
+ self.result = Result(
32
+ name="TestScript",
33
+ warnings=["duplicate dependencies"],
34
+ errors=["missing dependencies"],
35
+ )
36
+
37
+ @patch("sys.stdout", new_callable=StringIO)
38
+ def test_report_verbosity_2(self, mock_stdout):
39
+ reporter = Reporter(verbosity=2)
40
+ reporter.report([self.result])
41
+
42
+ output = mock_stdout.getvalue()
43
+
44
+ self.assertIn("TestScript - warnings: 1, errors: 1", output)
45
+ self.assertIn("warning: duplicate dependencies", output)
46
+ self.assertIn("error: missing dependencies", output)
47
+
48
+
49
+ class TestCLIArgs(unittest.TestCase):
50
+ @patch(
51
+ "sys.argv",
52
+ [
53
+ "prog",
54
+ "--root",
55
+ "tests/standalone_plugins/nasl",
56
+ "--feed",
57
+ "feed_22_04",
58
+ "--log",
59
+ "info",
60
+ ],
61
+ )
62
+ def test_parse_args_ok(self):
63
+ args = parse_args()
64
+ self.assertEqual(args.root, Path("tests/standalone_plugins/nasl"))
65
+ self.assertEqual(args.feed, [Feed.FEED_22_04])
66
+ self.assertEqual(args.log, "info")
67
+
68
+ @patch("sys.stderr", new_callable=StringIO)
69
+ @patch("sys.argv", ["prog", "--root", "not_real_dir"])
70
+ def test_parse_args_no_dir(self, mock_stderr):
71
+ with self.assertRaises(SystemExit):
72
+ parse_args()
73
+ self.assertRegex(mock_stderr.getvalue(), "invalid directory_type")
74
+
75
+ @patch("sys.stderr", new_callable=StringIO)
76
+ @patch(
77
+ "sys.argv",
78
+ [
79
+ "prog",
80
+ "--root",
81
+ "tests/standalone_plugins/nasl",
82
+ "--feed",
83
+ "invalid_feed",
84
+ ],
85
+ )
86
+ def test_parse_args_invalid_feed(self, mock_stderr):
87
+ with self.assertRaises(SystemExit):
88
+ parse_args()
89
+ self.assertRegex(mock_stderr.getvalue(), "Invalid Feed value")
90
+
91
+ @patch.dict(os.environ, {"VTDIR": "/mock/env/path"})
92
+ @patch("sys.argv", ["prog"])
93
+ def test_parse_args_with_env(self):
94
+ args = parse_args()
95
+ self.assertEqual(args.root, Path("/mock/env/path"))
96
+
97
+ @patch("sys.argv", ["prog", "--root", "tests/standalone_plugins/nasl"])
98
+ def test_parse_args_defaults(self):
99
+ args = parse_args()
100
+ self.assertEqual(args.log, "WARNING")
101
+ self.assertEqual(args.feed, [Feed.FULL])
102
+
103
+
104
+ class TestDependencyGraph(unittest.TestCase):
105
+
106
+ def setUp(self) -> None:
107
+ self.local_root = "tests/standalone_plugins/nasl"
108
+ self.script_content = """
109
+ if(description)
110
+ {
111
+ script_category(ACT_GATHER_INFO);
112
+ script_dependencies( "foo.nasl", "foo.nasl" );
113
+
114
+ if(FEED_NAME == "GSF" || FEED_NAME == "GEF" || FEED_NAME == "SCM")
115
+ script_dependencies("gsf/enterprise_script.nasl");
116
+
117
+ exit(0);
118
+ }
119
+ """
120
+
121
+ def test_get_feed(self):
122
+ feed = [Feed.FULL]
123
+ scripts = get_feed(Path(self.local_root), feed)
124
+ self.assertEqual(len(scripts), 6)
125
+
126
+ @patch("pathlib.Path.read_text")
127
+ def test_get_scripts(self, mock_read_text):
128
+ mock_read_text.return_value = self.script_content
129
+ scripts = get_scripts(Path(self.local_root) / "common")
130
+ self.assertEqual(len(scripts), 4)
131
+ self.assertEqual(scripts[0].feed, "community")
132
+ self.assertEqual(len(scripts[0].dependencies), 3)
133
+ self.assertEqual(scripts[0].category, VTCategory.ACT_GATHER_INFO)
134
+ self.assertEqual(scripts[0].deprecated, False)
135
+
136
+ def test_determine_feed(self):
137
+ community_script = Path("foo/script.nasl")
138
+ enterprise_script = Path("gsf/script.nasl")
139
+
140
+ self.assertEqual(determine_feed(community_script), "community")
141
+ self.assertEqual(determine_feed(enterprise_script), "enterprise")
142
+
143
+ def test_extract_dependencies(self):
144
+ dependencies = extract_dependencies(self.script_content)
145
+ self.assertEqual(len(dependencies), 3)
146
+ self.assertEqual(dependencies[0].name, "foo.nasl")
147
+ self.assertEqual(dependencies[1].name, "foo.nasl")
148
+ self.assertEqual(dependencies[2].name, "gsf/enterprise_script.nasl")
149
+ self.assertEqual(dependencies[0].is_enterprise_feed, False)
150
+ self.assertEqual(dependencies[1].is_enterprise_feed, False)
151
+ self.assertEqual(dependencies[2].is_enterprise_feed, True)
152
+
153
+ def test_extract_category(self):
154
+ category = extract_category(self.script_content)
155
+ self.assertEqual(category, VTCategory.ACT_GATHER_INFO)
156
+
157
+ def test_create_graph(self):
158
+ dependency1 = Dependency("bar.nasl", False)
159
+ scripts = [
160
+ Script("foo.nasl", "community", [dependency1], 0, False),
161
+ Script("bar.nasl", "enterprise", [], 0, False),
162
+ ]
163
+ graph = create_graph(scripts)
164
+ self.assertEqual(len(list(graph.nodes)), 2)
165
+
166
+ @patch("sys.stdout", new_callable=StringIO) # mock_stdout (second argument)
167
+ @patch("sys.stderr", new_callable=StringIO) # mock_stderr (first argument)
168
+ @patch(
169
+ "sys.argv", ["prog", "--root", "tests/standalone_plugins/nasl", "-v"]
170
+ ) # no argument
171
+ def test_full_run(self, mock_stderr, mock_stdout):
172
+ return_code = main()
173
+ output = mock_stdout.getvalue()
174
+
175
+ self.assertIn("error: missing dependency file: missing.nasl:", output)
176
+ self.assertIn(
177
+ "error: cyclic dependency: ", # order is random so can't match the output
178
+ output,
179
+ )
180
+ self.assertIn(
181
+ "error: unchecked cross-feed-dependency: foo.nasl(community feed) depends on"
182
+ " gsf/enterprise_script.nasl(enterprise feed), but the"
183
+ " current feed is not properly checked",
184
+ output,
185
+ )
186
+ self.assertIn(
187
+ "error: bar.nasl depends on foo.nasl which has a lower category order",
188
+ output,
189
+ )
190
+ self.assertIn(
191
+ "error: foo.nasl depends on deprecated script foobar.nasl", output
192
+ )
193
+ self.assertIn(
194
+ "warning: Duplicate dependencies in bar.nasl: foo.nasl", output
195
+ )
196
+ self.assertIn(
197
+ "warning: cross-feed-dependency: bar.nasl(community feed)"
198
+ " depends on gsf/enterprise_script.nasl(enterprise feed)",
199
+ output,
200
+ )
201
+ self.assertEqual(return_code, 1)
@@ -44,6 +44,7 @@ class TestNASLinter(unittest.TestCase):
44
44
  "**/templates/*/*.nasl",
45
45
  "**/test_files/*",
46
46
  "**/test_files/**/*.nasl",
47
+ "**/tests/standalone_plugins/**/*.nasl",
47
48
  ],
48
49
  include_patterns=["**/*.nasl", "**/*.inc"],
49
50
  )
@@ -2,4 +2,4 @@
2
2
 
3
3
  # THIS IS AN AUTOGENERATED FILE. DO NOT TOUCH!
4
4
 
5
- __version__ = "25.3.0"
5
+ __version__ = "25.3.2"
@@ -26,6 +26,7 @@ from pathlib import Path
26
26
  from pontos.terminal import Terminal
27
27
 
28
28
 
29
+ # allows non existent paths and directory paths
29
30
  def directory_type(string: str) -> Path:
30
31
  directory_path = Path(string)
31
32
  if directory_path.exists() and not directory_path.is_dir():
@@ -33,6 +34,15 @@ def directory_type(string: str) -> Path:
33
34
  return directory_path
34
35
 
35
36
 
37
+ # allows only existing directory paths
38
+ def directory_type_existing(string: str) -> Path:
39
+ directory_path = Path(string)
40
+ if not directory_path.is_dir():
41
+ raise ValueError(f"{string} is not a directory.")
42
+ return directory_path
43
+
44
+
45
+ # allows non existent paths and file paths
36
46
  def file_type(string: str) -> Path:
37
47
  file_path = Path(string)
38
48
  if file_path.exists() and not file_path.is_file():
@@ -40,6 +50,14 @@ def file_type(string: str) -> Path:
40
50
  return file_path
41
51
 
42
52
 
53
+ # allows only existing file paths
54
+ def file_type_existing(string: str) -> Path:
55
+ file_path = Path(string)
56
+ if not file_path.is_file():
57
+ raise ValueError(f"{string} is not a file.")
58
+ return file_path
59
+
60
+
43
61
  def check_cpu_count(number: str) -> int:
44
62
  """Make sure this value is valid
45
63
  Default: use half of the available cores to not block the machine"""
@@ -34,6 +34,7 @@
34
34
  0x20: C8 E6 AB 65 3B A9 5A 0E 14 00 00 05 41 44 4D 49 ...e;.Z.....ADMI
35
35
  0x20: D5 A6 22 5D 33 E4 C6 0E 14 00 00 05 61 64 6D 69 .."]3.......admi
36
36
  0x40: 61 6C 64 6F 6D 61 69 6E 00 07 64 65 66 61 75 6C aldomain..defaul
37
+ 0x40: 66 6C 61 74 65 3D 67 7A 69 70 0D 0A 66 69 6C 65 flate=gzip..file
37
38
  # 0x50: 72 6F 2E 70 72 6F 64 75 63 74 2E 64 65 76 69 63 ro.product.devic
38
39
  # 0x50: 74 72 69 6E 67 20 6D 69 73 73 69 6E 67 20 6F 72 tring missing or
39
40
  # 0x50: 75 65 73 74 3A 20 47 45 54 20 2F 20 uest: GET / # nb: Trailing space
@@ -231,6 +232,7 @@ Claus Wahlers reported that random images from GPU memory
231
232
  clen +
232
233
  clen = "567";
233
234
  clen = data_len( data:_ciphers );
235
+ - Cleo Streem
234
236
  "cliente",
235
237
  cmd = 'for usr in $(cut -d: -f1 /etc/shadow); do [[ $(chage --list $usr | grep \'^Last password change\' | cut -d: -f2) > $(date) ]] && echo "$usr :$(chage --list $usr | grep \'^Last password change\' | cut -d: -f2)"; done';
236
238
  cmd = "mount | grep -w ro";
@@ -262,6 +264,9 @@ Corrected a badly constracted file which could have allowed treating of
262
264
  could lead to shared memory segments of other users beeing freed
263
265
  cpe = build_cpe(value:appVer, exp:"^([0-9]\.[0-9]+\.[0-9]+)", base:"cpe:/a:shemes:grabit:");
264
266
  cpe = build_cpe(value:ver, exp:"^([0-9.]+)", base:"cpe:/a:mitre:ovaldi:");
267
+ cpe = build_cpe(value: vers, exp: "^([0-9.]+)", base: "cpe:/a:aprox:aproxengine:");
268
+ cpe = "cpe:/a:aprox:aproxengine";
269
+ CPE = "cpe:/a:aprox:aproxengine";
265
270
  CPE = "cpe:/a:mapp:webtrekk:";
266
271
  cpe = "cpe:/a:mitre:ovaldi";
267
272
  CPE = "cpe:/a:netsparker:wass";
@@ -270,6 +275,7 @@ CPE: cpe:/a:tawk:tawk.to_live_chat:0.8.0
270
275
  cpe =~ "^cpe:/o:hp:laserjet_pro_420[1-3](cdn|dn|dw|dne|dwe)_firmware") {
271
276
  CPU' could have occured because a retry loop continually finds the same
272
277
  crafted IFF ILBM file. NOTE: some of these details are obtained from
278
+ crafted wLongsPerEntry or nEntriesInUse value in the indx chunk, which
273
279
  crapData = string("ALLO ", crap(length: 25000),"\r\n");
274
280
  crash) via a malformed file with UPack encoding (CVE-2009-1371).
275
281
  Create all system-defined macros defore processing command-line given
@@ -340,6 +346,7 @@ CVE-2020-36158: Fixed an issue wich might have allowed a remote
340
346
  CVE-2020-5208: Fixed multiple remote code executtion vulnerabilities
341
347
  CVE-2020-8492: Fixed a regular expression in urrlib that was prone to
342
348
  CVE-2021-30004: Fixed an issue where forging attacks might have occured
349
+ * CVE-2021-47311: net: qcom/emac: fix UAF in emac_remove (bsc#1225010).
343
350
  dass eine geeignete Windows 8.1 Version, vorzugsweise eine 64-Bit Variante, eingesetzt werden muss.");
344
351
  "DataArchivingService/webcontent/aas",
345
352
  "/DataArchivingService/webcontent/aas/aas_store.jsp");
@@ -398,7 +405,7 @@ Enable log information of starting/stoping services. (bsc#1144923,
398
405
  <!-- Ende Message Box -->
399
406
  Engineering (TE) database and then a subsequent operation attempts to process these, rpd will
400
407
  Engineering (TE) tunnel's physical source interface is not propagated to hardware after the adjacency is lost.
401
- - ERRO[0000] Error creating docker key file: CreateKeyFile write root.key file failed. open /root/.docker/root.key: permission denied
408
+ - ERRO[0000] Error creating docker key file: CreateKeyFile write root.key file failed. open /root/.docker/root.key: permission denied
402
409
  eSpace IAD, eSpace U1981 and eSpace USM.");
403
410
  establishment of the Cisco Nexus 9000 Series Application Centric Infrastructure (ACI) Mode Switch
404
411
  exact-width integer types int{N}_t and uint{N}_t.
@@ -410,10 +417,13 @@ EXP=expext.dll
410
417
  expressions that are not properly handled by a stap script that
411
418
  * extended EAP-SIM/AKA fast re-authentication to allow use with FILS
412
419
  extended EAP-SIM/AKA fast re-authentication to allow use with FILS
420
+ - Extended HTTP methods: ACL, BASELINE-CONTROL, BIND, CHECKIN, CHECKOUT, COPY, LABEL, LINK, LOCK,
421
+ extended_methods = make_list("ACL", "BASELINE-CONTROL", "BIND", "CHECKIN", "CHECKOUT", "COPY",
413
422
  external emulators, which may have cuased Xen to crash, resulting in a
414
423
  'facsimiletelephonenumber' to the Access Control Instruction (ACI) for user
415
424
  family_id = 'oval:org.mitre.oval:obj:99';
416
425
  family_xml = '\t\t<family_item xmlns="http://oval.mitre.org/XMLSchema/oval-sys' +
426
+ "Faroe Islands" : [ "FO", "English", "PAL", "(UTC+00:00) Dublin", 0 ],
417
427
  (FATE#312793, bnc#782369). The userland utilities were published seperately to support this feature.
418
428
  (FATE#313309) The ipset userland utility will be published seperately to support this feature.
419
429
  (FATE#314441). A seperate hyper-v package will be published to support this feature.
@@ -546,6 +556,7 @@ if (http_vuln_check(port: port, url: url, pattern: "<title>WAN Setup", check_hea
546
556
  if(!isnull(res = isdpkgvuln(pkg:"nd", ver:"0.5.0-1woody1", rls:"DEB3.0"))) {
547
557
  if(!isnull(res = isrpmvuln(pkg:"libell", rpm:"libell~0.26~1.fc31", rls:"FC31"))) {
548
558
  if( "Login successed" >< recv ) {
559
+ if (methods = egrep(pattern: "^([Aa]llow|[Pp]ublic)\s*:", string: res, icase: FALSE)) {
549
560
  if( model =~ "^(RICOH|LANIER|SAVIN|NRG)" && "Network Printer" >< model ) {
550
561
  if( ( model =~ '^RP200' || model =~ '^TE[3456]0' ) && revcomp( a: version, b: "v600r006c00spc500" ) < 0) {
551
562
  if( model =~ '^TE[3456]0' && revcomp( a: version, b: "v600r006c00spc500" ) < 0 ) {
@@ -565,7 +576,9 @@ if (prod =~ "^BMX\s*NOE\s*0110$") {
565
576
  if (prod =~ "^BMX\s*NOE\s*0110$" || prod =~ "^BMX\s*NOE\s*0110H$") {
566
577
  if (prod =~ "^BMX\s*NOE\s*0110" && version_is_less(version: version, test_version: "6.5")) {
567
578
  if (prod =~ "^BMX\s*NOE\s*0110" && version_is_less(version: version, test_version: "6.70")) {
579
+ if (prod =~ "^BMX\s*NOE\s*0200") {
568
580
  if (!prod || (prod !~ "^BMX\s*P34" && prod !~ "^BMX\s*NOE\s*01[01]0"))
581
+ if (!prod || (prod !~ "^BMX\s*P34" && prod !~ "^BMX\s*NOE\s*0(1[01]|20)0"))
569
582
  if (!prod || (prod !~ "^BMX\s*P34" && prod !~ "^BMX\s*NOR\s*0200H" && prod !~ "^BMX\s*NOE\s*0100" &&
570
583
  if( r =~ " (A\. A\. Milne|Albert Einstein|Anonimo|Antico proverbio cinese|Autor desconocido|Charles Dickens|Francisco de Quevedo y Villegas|George Bernard Shaw|Jaime Balmes|Johann Wolfgang von Goethe|Jil Sander|Juana de Asbaje|Konfucius|Lord Philip Chesterfield|Montaigne|Petrarca|Ralph Waldo Emerson|Seneca|Syrus|Werner von Siemens)" ||
571
584
  if(rcvRes && '>iAm[i]nE<' >< rcvRes)
@@ -585,6 +598,7 @@ if( "Server: Boa" >!< banner || ( "AirLive" >!< banner && banner !~ "(WL|MD|BU|P
585
598
  if (sysdesc =~ "^(RICOH|LANIER|SAVIN|NRG)" && (sysdesc =~ "(RICOH|LANIER|SAVIN|NRG) Network Printer" ||
586
599
  if ("<title>Cisco NFVIS</title>" >< res && 'content="Xenon Boostrap Admin Panel"' >< res) {
587
600
  if ("<title>COMfortel</title>" >< res && "/statics/script/pageChallenge.js" >< res) {
601
+ if( "<title>Login to Axis2:: Administartion page</title>" >< buf8 ||
588
602
  if( "[Xx]-[Aa]dobe-[Cc]ontent" >< pattern )
589
603
  if( "[Xx]-[Aa]dobe-[Cc]ontent" >< pattern )
590
604
  If you disable this policy setting, transcripting of PowerShell-based applications is disabled by
@@ -678,7 +692,9 @@ kJtP0F6mv/Afe/5s7yd3ZJ/72yT73NjLg0vWbmLkop6eOR+CKw4nxorWxpocAj0p
678
692
  # Kubernetes Dashboard Public WAN (Internet) Accessible
679
693
  L3: conring size for XEN HV's with huge memory to small. Inital Xen logs
680
694
  LAST_PATCH_UPDATE UpToDate
695
+ "leadin/readme.txt", "HubSpot#---#=== HubSpot -#---#Stable tag: ([0-9.]+)#---#cpe:/a:hubspot:hubspot",
681
696
  leaks because of a missing check when transfering pages via
697
+ <li><a href="Status_Router.asp"><strong><script type="text/javascript">Capture(bmenu.statu)</script></strong></a></li>
682
698
  library: Increment to 7:0:1 No changes, no removals New fuctions:
683
699
  [link moved to references] has more informations.
684
700
  <link rel="stylesheet" href="/bui/base.css?v=GWAY-8.3.1-0086" />
@@ -718,6 +734,7 @@ Mark Shepard discovered a double free in the TCP listener cleanup which could re
718
734
  "messasges",
719
735
  "Metastasio (Ipermestra)" >< banner || '"\r\nAnonimo' >< banner || banner =~ '^"[^"]+" *Autor desconocido[ \t\r\n]*$' || "/usr/games/fortune: not found" >< banner ||
720
736
  "Metastasio (Ipermestra)" >< r || '"\r\nAnonimo' >< r || r =~ '^"[^"]+" *Autor desconocido[ \t\r\n]*$' ) {
737
+ methods = eregmatch(pattern: "^([Aa]llow|[Pp]ublic)\s*:\s*([A-Z,]+\s*([A-Z ,]+)?)", string: methods,
721
738
  MFSA 2012-27 / CVE-2012-0474: Security researchers Jordi Chancel and Eddy Bordi reported that they could short-circuit page loads to show the address of a different site than what is ... [Please see the references for more information on the vulnerabilities]");
722
739
  MFSA 2012-75 / CVE-2012-3984: Security researcher David Bloom of Cue discovered that 'select' elements are always-on-top chromeless windows and that navigation away from a page with an active 'select' menu does not remove this window.When another menu is opened programmatically on a new page, the original 'select' menu can be retained and arbitrary HTML content within it rendered, allowing an attacker to cover arbitrary portions of the new page through absolute positioning/scrolling, leading to spoofing attacks. Security researcher Jordi Chancel found a variation that would allow for click-jacking attacks was well.
723
740
  MFSA 2013-23 / CVE-2013-0765: Mozilla developer Boris Zbarsky reported that in some circumstances a wrapped WebIDL object can be wrapped multiple times, overwriting the existing wrapp... [Please see the references for more information on the vulnerabilities]");
@@ -863,6 +880,7 @@ reenable php7-dba support of Berkeley DB (bsc#1108554)");
863
880
  # Ref : http://www.hsc.fr/ressources/articles/win_net_srv/index.html.en by Jean-Baptiste Marchand
864
881
  register_and_report_cpe( app:"Netsparker - Web Application Security Scanner", ver:netVer, base:"cpe:/a:netsparker:wass:", expr:"^([0-9.]+)", insloc:netPath );
865
882
  register_and_report_cpe(app:"Wiesemann & Theis GmbH " + appName, ver:version, concluded:concluded,
883
+ * [REGRESSION] 'call into AER handling regardless of severity' triggers
866
884
  reg_xml = '\t\t<registry_item' + status + ' xmlns="http://oval.mitre.org/' +
867
885
  Reject invalid eliptic curve point coordinates (bsc#1131291)");
868
886
  rejection for EXTRAVERSION = -xfs, but likely little else will be
@@ -891,6 +909,7 @@ req = string("POST /UE/ProcessForm HTTP/1.1\r\n",
891
909
  res = http_get_cache(port: port, item: dir + "/product.comparision.php");
892
910
  - Restrict envrionment variable expansion to `ENV`, `ADD`, `COPY`,
893
911
  result = "Diese Vorgabe muss manuell ueberprueft werden.";
912
+ "resutls": {
894
913
  return -1, "The following script_xref of VT '" + str(file) + "' is pointing to Mitre/NVD which is already covered by the script_cve_id. This is a redundant info and the script_xref needs to be removed:" + nvd_mitre_link_tags
895
914
  return("Diese Vorgabe muss manuell ueberprueft werden.");
896
915
  return make_list( "error", text_response + 'Ueberpruefung fehlgeschlagen. Die Verwendung der benoetigten win_cmd_exec Funktion wurde in "Options for Local Security Checks (OID: 1.3.6.1.4.1.25623.1.0.100509)" manuell deaktiviert.\n' );
@@ -939,6 +958,7 @@ SAML/CAS tokens in the session database, an attacker can open an anonymous
939
958
  script_mandatory_keys("Jasig CAS server/Installed");
940
959
  script_mandatory_keys("shttp/detected");
941
960
  script_mandatory_keys("telnet/huawei/te/detected");
961
+ script_mandatory_keys("wordpress/plugin/leadin/detected");
942
962
  script_mandatory_keys("wordpress/plugin/mailin/detected");
943
963
  script_name("Acronis Cyber Infrastructure (ACI) Detection (HTTP)");
944
964
  script_name("Acronis Cyber Infrastructure (ACI) RCE Vulnerability (SEC-6452)");
@@ -1002,6 +1022,7 @@ SAML/CAS tokens in the session database, an attacker can open an anonymous
1002
1022
  script_tag(name:"affected", value:"Petite Annonce version 1.0 is known to be affected. Other
1003
1023
  script_tag(name:"affected", value:"RV320 Dual Gigabit WAN VPN Router and RV325 Dual Gigabit WAN
1004
1024
  script_tag(name:"affected", value:"RV320 Dual Gigabit WAN VPN Router and RV325 Dual Gigabit WAN VPN Router.");
1025
+ script_tag(name:"affected", value:"Symantec Encryption Management Server (SEMS)
1005
1026
  script_tag(name:"affected", value:"tre on Fedora 23");
1006
1027
  script_tag(name:"affected", value:"tre on Fedora 24");
1007
1028
  script_tag(name:"affected", value:"tre on Fedora 25");
@@ -1042,6 +1063,7 @@ SAML/CAS tokens in the session database, an attacker can open an anonymous
1042
1063
  script_tag(name:"insight", value:"Federico Manuel Bento discovered that the Linux kernel did not properly
1043
1064
  script_tag(name:"insight", value:"FreeS/WAN, Openswan, strongSwan and Super-FreeS/WAN contain two bugs when
1044
1065
  script_tag(name:"insight", value:"In Apache::Session::Browseable before 1.3.6, validity of the X.509 certificate is not checked by default when connecting to remote LDAP backends, because the default configuration of the Net::LDAPS module for Perl is used.
1066
+ script_tag(name:"insight", value:"It was discovered that a race condition existed in the ARC EMAC ethernet
1045
1067
  script_tag(name:"insight", value:"It was discovered that a specially-crafted packet sent to the racoon ipsec key exchange server could cause a tunnel to crash, resulting in a denial of service.
1046
1068
  script_tag(name:"insight", value:"It was discovered that the VLC CAF demuxer incorrectly handled certain
1047
1069
  script_tag(name:"insight", value:"James Troup discovered that MAAS stored RabbitMQ
@@ -1053,6 +1075,7 @@ SAML/CAS tokens in the session database, an attacker can open an anonymous
1053
1075
  script_tag(name:"insight", value:"Juraj Somorovsky, Robert Merget and Nimrod Aviram discovered a padding oracle attack in OpenSSL.
1054
1076
  script_tag(name:"insight", value:"Juraj Somorovsky, Robert Merget, and Nimrod Aviram discovered that certain
1055
1077
  script_tag(name:"insight", value:"libsoup without ca path added, accepted all SSL certificats as trusted. This has been fixed. CVE-2012-2132 has been assigned to this issue.
1078
+ script_tag(name:"insight", value:"Local ABL Client bypass of the required PASOE security checks
1056
1079
  script_tag(name:"insight", value:"LSAT insecurely creates temporary files which can lead to symlink attacks
1057
1080
  script_tag(name:"insight", value:"Manuel Nickschas discovered that Konversation did not properly perform
1058
1081
  script_tag(name:"insight", value:"Meh Chang discovered that Exim incorrectly
@@ -1126,6 +1149,7 @@ SAML/CAS tokens in the session database, an attacker can open an anonymous
1126
1149
  script_tag(name:"summary", value:"Palo Alto PAN-OS is prone to a vulnerability in Panorama SD WAN.");
1127
1150
  script_tag(name:"summary", value:"Petite Annonce is prone to a cross-site scripting (XSS)
1128
1151
  script_tag(name:"summary", value:"Telnet based detection of Huawei TE (Telepresence and
1152
+ script_tag(name:"summary", value:"The management console for Symantec Encryption Management Server (SEMS) is susceptible to potential OS command execution,
1129
1153
  script_tag(name:"summary", value:"The remote host is a SIP Express Router (SER).
1130
1154
  script_tag(name:"summary", value:"The remote host is missing an update for the 'Recommended udpate for SUSE Manager Client Tools' package(s) announced via the SUSE-SU-2016:1366-1 advisory.");
1131
1155
  script_tag(name:"summary", value:"The remote host is missing an update for the 'tre'
@@ -1471,6 +1495,7 @@ url = "/statics/html/index.htm";
1471
1495
  url = "/statics/pageChallenge.html";
1472
1496
  url = "/status/infomation.htm";
1473
1497
  url = string(dir, "/config.xml.sav");
1498
+ url = string( dir, "/index.php?file=Liens&op=", raw_string( 0x22 ), "><script>window.alert('test');</script>" );
1474
1499
  url = string(openVer[2], "/obj/autorisation.class.php?path_om=../../../../../../../../vt-rfi.txt");
1475
1500
  url = "/UE/advanced.html";
1476
1501
  url = "/UE/welcome_login.html";
@@ -1578,4 +1603,3 @@ xml += string( '<oval_system_characteristics xmlns="http://oval.mitre.org/XMLSch
1578
1603
  - XSS via a crafted WAN name on the General Setup screen (CVE-2019-16534)");
1579
1604
  "^[Xx]-[Aa]dobe-[Cc]ontent\s*:\s*AEM" );
1580
1605
  Zhongling Wen discovered that the h323 conntrack handler did not correctly
1581
- * CVE-2021-47311: net: qcom/emac: fix UAF in emac_remove (bsc#1225010).
@@ -22,10 +22,14 @@ complies
22
22
  # mentioned here this correction is fully ingored.
23
23
  racoon
24
24
  # re-use vs. reuse currently unclear, e.g. there is the following from https://dict.leo.org/forum/viewGeneraldiscussion.php?idForum=4&idThread=5586&lp=ende&lang=en:
25
- # Not even the wise and educated English native speakers seem to have a rule on hyphenation and there are differences between BE and AE.
26
- # As e.g. the spelling correction in Mozilla Firefox is accepting both we're excluding this for now
25
+ # > Not even the wise and educated English native speakers seem to have a rule on hyphenation and there are differences between BE and AE.
26
+ # https://en.wiktionary.org/wiki/re-uses lists and https://en.wiktionary.org/wiki/re-use lists these as valid as well.
27
+ # As e.g. the spelling correction in Mozilla Firefox is accepting all we're excluding this for now
27
28
  re-use
29
+ re-used
30
+ re-uses
28
31
  re-usable
32
+ re-using
29
33
  # Bootup is commonly used in e.g. example output and seems to be also generally valid like seen on:
30
34
  # https://en.wiktionary.org/wiki/bootup
31
35
  # so it is ignored (at least for now)
@@ -31,6 +31,20 @@ from troubadix.plugin import (
31
31
  )
32
32
 
33
33
 
34
+ def split_dependencies(value: str) -> list[str]:
35
+ """
36
+ Remove single and/or double quotes, spaces
37
+ and create a list by using the comma as a separator
38
+ additionally, check and filter for inline comments
39
+ """
40
+ dependencies = []
41
+ for line in value.splitlines():
42
+ subject = line[: line.index("#")] if "#" in line else line
43
+ _dependencies = re.sub(r'[\'"\s]', "", subject).split(",")
44
+ dependencies += [dep for dep in _dependencies if dep != ""]
45
+ return dependencies
46
+
47
+
34
48
  class CheckDependencies(FilePlugin):
35
49
  name = "check_dependencies"
36
50
 
@@ -60,17 +74,7 @@ class CheckDependencies(FilePlugin):
60
74
 
61
75
  for match in matches:
62
76
  if match:
63
- # Remove single and/or double quotes, spaces
64
- # and create a list by using the comma as a separator
65
- # additionally, check and filter for inline comments
66
- dependencies = []
67
-
68
- for line in match.group("value").splitlines():
69
- subject = line[: line.index("#")] if "#" in line else line
70
- _dependencies = re.sub(r'[\'"\s]', "", subject).split(",")
71
- dependencies += [dep for dep in _dependencies if dep != ""]
72
-
73
- for dep in dependencies:
77
+ for dep in split_dependencies(match.group("value")):
74
78
  if not any(
75
79
  (root / vers / dep).exists() for vers in FEED_VERSIONS
76
80
  ):
@@ -34,6 +34,7 @@ exceptions = [
34
34
  TextCheck("Multiple '/' Vulnerability"),
35
35
  TextCheck("an attackers choise"),
36
36
  TextCheck("multiple error handling vulnerabilities"),
37
+ TextCheck("multiple error messages"),
37
38
  # Like seen in 2022/debian/deb_dla_2981.nasl
38
39
  TextCheck("a multiple concurrency"),
39
40
  # From 2008/debian/deb_1017_1.nasl
@@ -41,8 +41,8 @@ IGNORE = [
41
41
  "common/2008/freebsd/freebsdsa_cpio.nasl",
42
42
  "common/2008/freebsd/freebsdsa_cvs2.nasl",
43
43
  "common/2009/osc_photoGallery_sql_injection.nasl",
44
- "common/2009/secpod_novell_edir_mult_vuln_jul09_lin.nasl",
45
- "common/2009/secpod_novell_edir_mult_vuln_jul09_win.nasl",
44
+ "common/2009/gb_novell_edir_mult_vuln_jul09_lin.nasl",
45
+ "common/2009/gb_novell_edir_mult_vuln_jul09_win.nasl",
46
46
  "common/2010/freebsd/freebsd_3a7c5fc4.nasl",
47
47
  "common/2012/freebsd/freebsd_a4a809d8.nasl",
48
48
  "common/2015/amazon/alas-2014-455.nasl",
@@ -434,8 +434,8 @@ class CheckValidOID(FileContentPlugin):
434
434
  "2008/asterisk_pbx_guest_access_enabled.nasl",
435
435
  "2008/asterisk_null_pointer_dereference.nasl",
436
436
  "2008/goaheadwebserver_source_disclosure.nasl",
437
- "2011/secpod_ibm_lotus_domino_rpc_auth_dos_vuln.nasl",
438
- "2011/secpod_cubecart_mult_xss_and_sql_inj_vuln.nasl",
437
+ "2011/gb_ibm_lotus_domino_rpc_auth_dos_vuln.nasl",
438
+ "2011/gb_cubecart_mult_xss_and_sql_inj_vuln.nasl",
439
439
  "2016/gb_adobe_air_mult_vuln_feb16_macosx.nasl",
440
440
  "attic/gb_cybozu_garoon_mult_vuln_aug16.nasl",
441
441
  "2017/gb_openssh_mult_vuln_jan17_lin.nasl",
@@ -23,16 +23,10 @@ from argparse import ArgumentParser, Namespace
23
23
  from pathlib import Path
24
24
  from typing import Iterable
25
25
 
26
+ from troubadix.argparser import file_type_existing
26
27
  from troubadix.standalone_plugins.common import git
27
28
 
28
29
 
29
- def file_type(string: str) -> Path:
30
- file_path = Path(string)
31
- if not file_path.is_file():
32
- raise ValueError(f"{string} is not a file.")
33
- return file_path
34
-
35
-
36
30
  def parse_args(args: Iterable[str]) -> Namespace:
37
31
  parser = ArgumentParser(
38
32
  description="Check for changed oid",
@@ -52,7 +46,7 @@ def parse_args(args: Iterable[str]) -> Namespace:
52
46
  "-f",
53
47
  "--files",
54
48
  nargs="+",
55
- type=file_type,
49
+ type=file_type_existing,
56
50
  default=[],
57
51
  help=(
58
52
  "List of files to diff. "
@@ -0,0 +1,2 @@
1
+ # SPDX-License-Identifier: GPL-3.0-or-later
2
+ # SPDX-FileCopyrightText: 2025 Greenbone AG