@orionscanner/cli 0.1.0 → 0.1.1

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 (129) hide show
  1. package/README.md +135 -248
  2. package/bin/orion.js +30 -29
  3. package/dist/orion.exe +0 -0
  4. package/package.json +8 -10
  5. package/docs/API_REFERENCE.md +0 -211
  6. package/docs/ARCHITECTURE.md +0 -183
  7. package/docs/CHANGELOG.md +0 -112
  8. package/docs/CONTRIBUTING.md +0 -157
  9. package/docs/ENGINE_CATALOG.md +0 -87
  10. package/docs/GETTING_STARTED.md +0 -226
  11. package/pyproject.toml +0 -16
  12. package/src/orion/__init__.py +0 -0
  13. package/src/orion/__pycache__/__init__.cpython-313.pyc +0 -0
  14. package/src/orion/engine/__init__.py +0 -17
  15. package/src/orion/engine/__pycache__/__init__.cpython-313.pyc +0 -0
  16. package/src/orion/engine/__pycache__/config.cpython-313.pyc +0 -0
  17. package/src/orion/engine/__pycache__/core.cpython-313.pyc +0 -0
  18. package/src/orion/engine/__pycache__/ir.cpython-313.pyc +0 -0
  19. package/src/orion/engine/__pycache__/languages.cpython-313.pyc +0 -0
  20. package/src/orion/engine/__pycache__/registry.cpython-313.pyc +0 -0
  21. package/src/orion/engine/__pycache__/results.cpython-313.pyc +0 -0
  22. package/src/orion/engine/__pycache__/runner.cpython-313.pyc +0 -0
  23. package/src/orion/engine/api_security/__pycache__/engine.cpython-313.pyc +0 -0
  24. package/src/orion/engine/api_security/engine.py +0 -125
  25. package/src/orion/engine/architecture/__pycache__/engine.cpython-313.pyc +0 -0
  26. package/src/orion/engine/architecture/engine.py +0 -463
  27. package/src/orion/engine/authorization/__pycache__/engine.cpython-313.pyc +0 -0
  28. package/src/orion/engine/authorization/engine.py +0 -337
  29. package/src/orion/engine/callgraph/__pycache__/engine.cpython-313.pyc +0 -0
  30. package/src/orion/engine/callgraph/engine.py +0 -236
  31. package/src/orion/engine/cfg/__pycache__/engine.cpython-313.pyc +0 -0
  32. package/src/orion/engine/cfg/engine.py +0 -509
  33. package/src/orion/engine/chaos/__pycache__/engine.cpython-313.pyc +0 -0
  34. package/src/orion/engine/chaos/engine.py +0 -268
  35. package/src/orion/engine/chaos_config/__pycache__/engine.cpython-313.pyc +0 -0
  36. package/src/orion/engine/chaos_config/engine.py +0 -322
  37. package/src/orion/engine/complexity/__pycache__/engine.cpython-313.pyc +0 -0
  38. package/src/orion/engine/complexity/engine.py +0 -144
  39. package/src/orion/engine/compliance/__pycache__/engine.cpython-313.pyc +0 -0
  40. package/src/orion/engine/compliance/engine.py +0 -325
  41. package/src/orion/engine/config.py +0 -41
  42. package/src/orion/engine/config_engine/__pycache__/engine.cpython-313.pyc +0 -0
  43. package/src/orion/engine/config_engine/engine.py +0 -364
  44. package/src/orion/engine/config_validation/__pycache__/engine.cpython-313.pyc +0 -0
  45. package/src/orion/engine/config_validation/engine.py +0 -313
  46. package/src/orion/engine/container/__pycache__/engine.cpython-313.pyc +0 -0
  47. package/src/orion/engine/container/engine.py +0 -546
  48. package/src/orion/engine/contract_probe/__pycache__/engine.cpython-313.pyc +0 -0
  49. package/src/orion/engine/contract_probe/engine.py +0 -316
  50. package/src/orion/engine/core.py +0 -75
  51. package/src/orion/engine/crypto_guard/__pycache__/engine.cpython-313.pyc +0 -0
  52. package/src/orion/engine/crypto_guard/engine.py +0 -134
  53. package/src/orion/engine/data_residency/__pycache__/engine.cpython-313.pyc +0 -0
  54. package/src/orion/engine/data_residency/engine.py +0 -238
  55. package/src/orion/engine/dataflow/__pycache__/engine.cpython-313.pyc +0 -0
  56. package/src/orion/engine/dataflow/engine.py +0 -398
  57. package/src/orion/engine/dead_import/__pycache__/engine.cpython-313.pyc +0 -0
  58. package/src/orion/engine/dead_import/engine.py +0 -293
  59. package/src/orion/engine/deps/__pycache__/engine.cpython-313.pyc +0 -0
  60. package/src/orion/engine/deps/engine.py +0 -244
  61. package/src/orion/engine/dispatcher.py +0 -350
  62. package/src/orion/engine/docs/AUDIT_PROMPT.md +0 -1248
  63. package/src/orion/engine/duplication/__pycache__/engine.cpython-313.pyc +0 -0
  64. package/src/orion/engine/duplication/engine.py +0 -120
  65. package/src/orion/engine/error_handling/__pycache__/engine.cpython-313.pyc +0 -0
  66. package/src/orion/engine/error_handling/engine.py +0 -256
  67. package/src/orion/engine/fp_learn/__pycache__/engine.cpython-313.pyc +0 -0
  68. package/src/orion/engine/fp_learn/engine.py +0 -248
  69. package/src/orion/engine/hunter/__pycache__/engine.cpython-313.pyc +0 -0
  70. package/src/orion/engine/hunter/engine.py +0 -324
  71. package/src/orion/engine/iac_security/__pycache__/engine.cpython-313.pyc +0 -0
  72. package/src/orion/engine/iac_security/engine.py +0 -218
  73. package/src/orion/engine/ir.py +0 -22
  74. package/src/orion/engine/languages.py +0 -454
  75. package/src/orion/engine/license/__pycache__/engine.cpython-313.pyc +0 -0
  76. package/src/orion/engine/license/engine.py +0 -172
  77. package/src/orion/engine/lint/__pycache__/engine.cpython-313.pyc +0 -0
  78. package/src/orion/engine/lint/engine.py +0 -558
  79. package/src/orion/engine/llm_security/__pycache__/engine.cpython-313.pyc +0 -0
  80. package/src/orion/engine/llm_security/engine.py +0 -125
  81. package/src/orion/engine/logging_c/__pycache__/engine.cpython-313.pyc +0 -0
  82. package/src/orion/engine/logging_c/engine.py +0 -164
  83. package/src/orion/engine/noise/__pycache__/engine.cpython-313.pyc +0 -0
  84. package/src/orion/engine/noise/engine.py +0 -140
  85. package/src/orion/engine/orphan/__pycache__/engine.cpython-313.pyc +0 -0
  86. package/src/orion/engine/orphan/engine.py +0 -244
  87. package/src/orion/engine/perf_guard/__pycache__/engine.cpython-313.pyc +0 -0
  88. package/src/orion/engine/perf_guard/engine.py +0 -345
  89. package/src/orion/engine/prompt_security/__pycache__/engine.cpython-313.pyc +0 -0
  90. package/src/orion/engine/prompt_security/detectors/__init__.py +0 -4
  91. package/src/orion/engine/prompt_security/engine.py +0 -170
  92. package/src/orion/engine/provenance/__pycache__/engine.cpython-313.pyc +0 -0
  93. package/src/orion/engine/provenance/engine.py +0 -242
  94. package/src/orion/engine/registry.py +0 -55
  95. package/src/orion/engine/regression/__pycache__/engine.cpython-313.pyc +0 -0
  96. package/src/orion/engine/regression/engine.py +0 -213
  97. package/src/orion/engine/results.py +0 -21
  98. package/src/orion/engine/runner.py +0 -1310
  99. package/src/orion/engine/sandbox_escape/__pycache__/engine.cpython-313.pyc +0 -0
  100. package/src/orion/engine/sandbox_escape/engine.py +0 -284
  101. package/src/orion/engine/sast/__pycache__/engine.cpython-313.pyc +0 -0
  102. package/src/orion/engine/sast/engine.py +0 -217
  103. package/src/orion/engine/sast/patterns/__init__.py +0 -513
  104. package/src/orion/engine/sast/patterns/__pycache__/__init__.cpython-313.pyc +0 -0
  105. package/src/orion/engine/secrets/__pycache__/engine.cpython-313.pyc +0 -0
  106. package/src/orion/engine/secrets/engine.py +0 -77
  107. package/src/orion/engine/secrets/patterns/__init__.py +0 -74
  108. package/src/orion/engine/secrets/patterns/__pycache__/__init__.cpython-313.pyc +0 -0
  109. package/src/orion/engine/sensitive_data/__pycache__/engine.cpython-313.pyc +0 -0
  110. package/src/orion/engine/sensitive_data/engine.py +0 -143
  111. package/src/orion/engine/state/__pycache__/engine.cpython-313.pyc +0 -0
  112. package/src/orion/engine/state/engine.py +0 -218
  113. package/src/orion/engine/supply_chain_sbom/__pycache__/engine.cpython-313.pyc +0 -0
  114. package/src/orion/engine/supply_chain_sbom/engine.py +0 -290
  115. package/src/orion/engine/symbol/__pycache__/engine.cpython-313.pyc +0 -0
  116. package/src/orion/engine/symbol/engine.py +0 -463
  117. package/src/orion/engine/taint/__pycache__/engine.cpython-313.pyc +0 -0
  118. package/src/orion/engine/taint/engine.py +0 -464
  119. package/src/orion/engine/test_coverage/__pycache__/engine.cpython-313.pyc +0 -0
  120. package/src/orion/engine/test_coverage/engine.py +0 -445
  121. package/src/orion/engine/threat_model/__pycache__/engine.cpython-313.pyc +0 -0
  122. package/src/orion/engine/threat_model/engine.py +0 -126
  123. package/src/orion/engine/wiring_trace/__pycache__/engine.cpython-313.pyc +0 -0
  124. package/src/orion/engine/wiring_trace/engine.py +0 -200
  125. package/src/orion_engine.egg-info/PKG-INFO +0 -7
  126. package/src/orion_engine.egg-info/SOURCES.txt +0 -65
  127. package/src/orion_engine.egg-info/dependency_links.txt +0 -1
  128. package/src/orion_engine.egg-info/entry_points.txt +0 -2
  129. package/src/orion_engine.egg-info/top_level.txt +0 -1
@@ -1,200 +0,0 @@
1
- """Config wiring trace engine - trace config from source to usage."""
2
- import re
3
- import os
4
- import json
5
- import ast
6
- from pathlib import Path
7
- from orion.engine.config import EngineConfig
8
- from orion.engine.ir import OrionIR
9
- from orion.engine.results import EngineResult, Finding
10
-
11
-
12
- class Engine:
13
- name = "wiring_trace"
14
- version = "1.0.0"
15
-
16
- CONFIG_FILES = {
17
- ".env", "config.yaml", "config.yml", "settings.py", "settings.json",
18
- "appsettings.json", "application.properties", "application.yml",
19
- "config.toml", "config.ini", "secrets.yaml", "secrets.yml"
20
- }
21
-
22
- ENV_ACCESS_PATTERNS = [
23
- (r"os\.getenv\s*\(\s*['\"]([^'\"]+)['\"]", "os.getenv"),
24
- (r"os\.environ\.get\s*\(\s*['\"]([^'\"]+)['\"]", "os.environ.get"),
25
- (r"os\.environ\s*\[\s*['\"]([^'\"]+)['\"]\s*\]", "os.environ[]"),
26
- (r"config\s*\(\s*['\"]([^'\"]+)['\"]", "config()"),
27
- (r"settings\.\w+", "settings."),
28
- (r"environ\s*\[\s*['\"]([^'\"]+)['\"]", "environ[]"),
29
- (r"getenv\s*\(\s*['\"]([^'\"]+)['\"]", "getenv()"),
30
- ]
31
-
32
- SECRET_KEY_PATTERNS = [
33
- r"(?i)(password|secret|key|token|api.?key|access.?key|private.?key)",
34
- r"(?i)(db.?password|database.?password|db.?secret)",
35
- r"(?i)(jwt.?secret|session.?secret|cookie.?secret)",
36
- r"(?i)(aws.?secret|aws.?access.?key)",
37
- r"(?i)(github.?token|gitlab.?token|slack.?token)",
38
- ]
39
-
40
- async def check_availability(self) -> bool:
41
- return True
42
-
43
- def resource_limits(self):
44
- from orion.engine.config import ResourceLimits
45
- return ResourceLimits(max_cpu_seconds=60, max_memory_mb=256)
46
-
47
- async def run(self, ir: OrionIR, config: EngineConfig) -> EngineResult:
48
- try:
49
- text = ir.content.decode("utf-8", errors="replace")
50
- except Exception:
51
- text = str(ir.content)
52
-
53
- path = ir.metadata.get("path", "unknown")
54
- filename = Path(path).name
55
- findings = []
56
-
57
- if filename in self.CONFIG_FILES:
58
- config_keys = self._parse_config_file(text, filename)
59
- if config_keys:
60
- findings.append(Finding(
61
- engine=self.name,
62
- severity="info",
63
- title=f"Config source detected: {filename}",
64
- description=f"Found {len(config_keys)} configuration keys in {filename}",
65
- location=path,
66
- metadata={
67
- "confidence": 1.0,
68
- "config_keys": list(config_keys.keys()),
69
- "source_type": filename,
70
- },
71
- ))
72
-
73
- env_keys = self._find_env_access(text)
74
- for key, pattern in env_keys:
75
- line_no = text[:text.find(key)].count("\n") + 1 if key in text else 1
76
- findings.append(Finding(
77
- engine=self.name,
78
- severity="info",
79
- title=f"Environment variable access: {key}",
80
- description=f"Code accesses environment variable '{key}' via {pattern}",
81
- location=f"{path}:{line_no}",
82
- metadata={
83
- "confidence": 0.9,
84
- "config_key": key,
85
- "access_method": pattern,
86
- "source": "code",
87
- },
88
- ))
89
-
90
- if filename.endswith(".py"):
91
- hardcoded = self._find_hardcoded_secrets(text, path)
92
- findings.extend(hardcoded)
93
-
94
- return EngineResult(engine=self.name, findings=findings, ok=True)
95
-
96
- def _parse_config_file(self, text: str, filename: str) -> dict:
97
- keys = {}
98
- if filename == ".env":
99
- for line in text.splitlines():
100
- line = line.strip()
101
- if line and not line.startswith("#") and "=" in line:
102
- key, val = line.split("=", 1)
103
- keys[key.strip()] = val.strip().strip('"\'')
104
- elif filename.endswith(".json"):
105
- try:
106
- data = json.loads(text)
107
- keys = self._flatten_dict(data)
108
- except Exception:
109
- pass
110
- elif filename.endswith((".yaml", ".yml")):
111
- keys = self._parse_yaml_simple(text)
112
- elif filename.endswith(".toml"):
113
- try:
114
- import tomllib
115
- data = tomllib.loads(text)
116
- keys = self._flatten_dict(data)
117
- except Exception:
118
- pass
119
- elif filename.endswith(".properties"):
120
- for line in text.splitlines():
121
- line = line.strip()
122
- if line and not line.startswith("#") and "=" in line:
123
- key, val = line.split("=", 1)
124
- keys[key.strip()] = val.strip()
125
- elif filename.endswith(".py"):
126
- try:
127
- tree = ast.parse(text)
128
- for node in ast.walk(tree):
129
- if isinstance(node, ast.Assign):
130
- for target in node.targets:
131
- if isinstance(target, ast.Name) and target.id.isupper():
132
- if isinstance(node.value, ast.Constant):
133
- keys[target.id] = str(node.value.value)
134
- except Exception:
135
- pass
136
- return keys
137
-
138
- def _parse_yaml_simple(self, text: str) -> dict:
139
- keys = {}
140
- indent_stack = []
141
- for line in text.splitlines():
142
- if not line.strip() or line.strip().startswith("#"):
143
- continue
144
- indent = len(line) - len(line.lstrip())
145
- while indent_stack and indent_stack[-1][0] >= indent:
146
- indent_stack.pop()
147
- match = re.match(r"^(\s*)([^:]+):\s*(.*)$", line)
148
- if match:
149
- key = match.group(2).strip()
150
- value = match.group(3).strip().strip('"\'')
151
- prefix = ".".join([x[1] for x in indent_stack]) if indent_stack else ""
152
- full_key = f"{prefix}.{key}" if prefix else key
153
- keys[full_key] = value
154
- indent_stack.append((indent, key))
155
- return keys
156
-
157
- def _flatten_dict(self, d: dict, prefix: str = "") -> dict:
158
- result = {}
159
- for k, v in d.items():
160
- new_key = f"{prefix}.{k}" if prefix else k
161
- if isinstance(v, dict):
162
- result.update(self._flatten_dict(v, new_key))
163
- else:
164
- result[new_key] = v
165
- return result
166
-
167
- def _find_env_access(self, text: str) -> list:
168
- results = []
169
- for pattern, method in self.ENV_ACCESS_PATTERNS:
170
- for match in re.finditer(pattern, text):
171
- key = match.group(1)
172
- results.append((key, method))
173
- return results
174
-
175
- def _find_hardcoded_secrets(self, text: str, path: str):
176
- findings = []
177
- lines = text.splitlines()
178
-
179
- for i, line in enumerate(lines):
180
- for pattern in self.SECRET_KEY_PATTERNS:
181
- match = re.search(pattern, line)
182
- if match:
183
- if re.search(r"=\s*['\"][^'\"]{8,}['\"]", line):
184
- if not re.search(r"os\.(getenv|environ)|config\(|settings\.", line):
185
- findings.append(Finding(
186
- engine=self.name,
187
- severity="high",
188
- title=f"Hardcoded secret value detected",
189
- description=f"Possible hardcoded secret matching pattern '{match.group(1)}' without config reference",
190
- location=f"{path}:{i+1}",
191
- metadata={
192
- "confidence": 0.8,
193
- "snippet": line.strip()[:200],
194
- "pattern": match.group(1),
195
- "issue": "hardcoded_secret",
196
- "cwe": "CWE-798",
197
- "cvss": 7.5,
198
- },
199
- ))
200
- return findings
@@ -1,7 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: orion-engine
3
- Version: 0.1.0
4
- Summary: Orion Security Suite - Proprietary In-House Code Intelligence & Security Audit Platform
5
- Requires-Python: >=3.10
6
- License-File: LICENSE
7
- Dynamic: license-file
@@ -1,65 +0,0 @@
1
- LICENSE
2
- README.md
3
- pyproject.toml
4
- src/orion/__init__.py
5
- src/orion/engine/__init__.py
6
- src/orion/engine/config.py
7
- src/orion/engine/core.py
8
- src/orion/engine/dispatcher.py
9
- src/orion/engine/ir.py
10
- src/orion/engine/languages.py
11
- src/orion/engine/registry.py
12
- src/orion/engine/results.py
13
- src/orion/engine/runner.py
14
- src/orion/engine/api_security/engine.py
15
- src/orion/engine/architecture/engine.py
16
- src/orion/engine/authorization/engine.py
17
- src/orion/engine/callgraph/engine.py
18
- src/orion/engine/cfg/engine.py
19
- src/orion/engine/chaos/engine.py
20
- src/orion/engine/chaos_config/engine.py
21
- src/orion/engine/complexity/engine.py
22
- src/orion/engine/compliance/engine.py
23
- src/orion/engine/config_engine/engine.py
24
- src/orion/engine/config_validation/engine.py
25
- src/orion/engine/container/engine.py
26
- src/orion/engine/contract_probe/engine.py
27
- src/orion/engine/crypto_guard/engine.py
28
- src/orion/engine/data_residency/engine.py
29
- src/orion/engine/dataflow/engine.py
30
- src/orion/engine/dead_import/engine.py
31
- src/orion/engine/deps/engine.py
32
- src/orion/engine/duplication/engine.py
33
- src/orion/engine/error_handling/engine.py
34
- src/orion/engine/fp_learn/engine.py
35
- src/orion/engine/hunter/engine.py
36
- src/orion/engine/iac_security/engine.py
37
- src/orion/engine/license/engine.py
38
- src/orion/engine/lint/engine.py
39
- src/orion/engine/llm_security/engine.py
40
- src/orion/engine/logging_c/engine.py
41
- src/orion/engine/noise/engine.py
42
- src/orion/engine/orphan/engine.py
43
- src/orion/engine/perf_guard/engine.py
44
- src/orion/engine/prompt_security/engine.py
45
- src/orion/engine/prompt_security/detectors/__init__.py
46
- src/orion/engine/provenance/engine.py
47
- src/orion/engine/regression/engine.py
48
- src/orion/engine/sandbox_escape/engine.py
49
- src/orion/engine/sast/engine.py
50
- src/orion/engine/sast/patterns/__init__.py
51
- src/orion/engine/secrets/engine.py
52
- src/orion/engine/secrets/patterns/__init__.py
53
- src/orion/engine/sensitive_data/engine.py
54
- src/orion/engine/state/engine.py
55
- src/orion/engine/supply_chain_sbom/engine.py
56
- src/orion/engine/symbol/engine.py
57
- src/orion/engine/taint/engine.py
58
- src/orion/engine/test_coverage/engine.py
59
- src/orion/engine/threat_model/engine.py
60
- src/orion/engine/wiring_trace/engine.py
61
- src/orion_engine.egg-info/PKG-INFO
62
- src/orion_engine.egg-info/SOURCES.txt
63
- src/orion_engine.egg-info/dependency_links.txt
64
- src/orion_engine.egg-info/entry_points.txt
65
- src/orion_engine.egg-info/top_level.txt
@@ -1,2 +0,0 @@
1
- [console_scripts]
2
- orion = orion.engine.runner:main
@@ -1 +0,0 @@
1
- orion