@surfinguard/core-engine 0.1.0 → 1.0.0

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 (114) hide show
  1. package/LICENSE +21 -0
  2. package/dist/analyzers/agent-comm.d.ts +22 -0
  3. package/dist/analyzers/agent-comm.d.ts.map +1 -0
  4. package/dist/analyzers/agent-comm.js +79 -0
  5. package/dist/analyzers/agent-comm.js.map +1 -0
  6. package/dist/analyzers/api-call.d.ts +21 -0
  7. package/dist/analyzers/api-call.d.ts.map +1 -0
  8. package/dist/analyzers/api-call.js +134 -0
  9. package/dist/analyzers/api-call.js.map +1 -0
  10. package/dist/analyzers/auth.d.ts +22 -0
  11. package/dist/analyzers/auth.d.ts.map +1 -0
  12. package/dist/analyzers/auth.js +97 -0
  13. package/dist/analyzers/auth.js.map +1 -0
  14. package/dist/analyzers/code.d.ts +32 -0
  15. package/dist/analyzers/code.d.ts.map +1 -0
  16. package/dist/analyzers/code.js +310 -0
  17. package/dist/analyzers/code.js.map +1 -0
  18. package/dist/analyzers/command.d.ts.map +1 -1
  19. package/dist/analyzers/command.js +91 -39
  20. package/dist/analyzers/command.js.map +1 -1
  21. package/dist/analyzers/data-pipeline.d.ts +23 -0
  22. package/dist/analyzers/data-pipeline.d.ts.map +1 -0
  23. package/dist/analyzers/data-pipeline.js +86 -0
  24. package/dist/analyzers/data-pipeline.js.map +1 -0
  25. package/dist/analyzers/document.d.ts +22 -0
  26. package/dist/analyzers/document.d.ts.map +1 -0
  27. package/dist/analyzers/document.js +77 -0
  28. package/dist/analyzers/document.js.map +1 -0
  29. package/dist/analyzers/file-read.d.ts.map +1 -1
  30. package/dist/analyzers/file-read.js +12 -3
  31. package/dist/analyzers/file-read.js.map +1 -1
  32. package/dist/analyzers/file-write.d.ts.map +1 -1
  33. package/dist/analyzers/file-write.js +12 -3
  34. package/dist/analyzers/file-write.js.map +1 -1
  35. package/dist/analyzers/git.d.ts +25 -0
  36. package/dist/analyzers/git.d.ts.map +1 -0
  37. package/dist/analyzers/git.js +126 -0
  38. package/dist/analyzers/git.js.map +1 -0
  39. package/dist/analyzers/index.d.ts +3 -0
  40. package/dist/analyzers/index.d.ts.map +1 -1
  41. package/dist/analyzers/index.js +3 -0
  42. package/dist/analyzers/index.js.map +1 -1
  43. package/dist/analyzers/infra.d.ts +30 -0
  44. package/dist/analyzers/infra.d.ts.map +1 -0
  45. package/dist/analyzers/infra.js +134 -0
  46. package/dist/analyzers/infra.js.map +1 -0
  47. package/dist/analyzers/iot.d.ts +22 -0
  48. package/dist/analyzers/iot.d.ts.map +1 -0
  49. package/dist/analyzers/iot.js +78 -0
  50. package/dist/analyzers/iot.js.map +1 -0
  51. package/dist/analyzers/message.d.ts +22 -0
  52. package/dist/analyzers/message.d.ts.map +1 -0
  53. package/dist/analyzers/message.js +106 -0
  54. package/dist/analyzers/message.js.map +1 -0
  55. package/dist/analyzers/query.d.ts +23 -0
  56. package/dist/analyzers/query.d.ts.map +1 -0
  57. package/dist/analyzers/query.js +183 -0
  58. package/dist/analyzers/query.js.map +1 -0
  59. package/dist/analyzers/text.d.ts.map +1 -1
  60. package/dist/analyzers/text.js +20 -3
  61. package/dist/analyzers/text.js.map +1 -1
  62. package/dist/analyzers/transaction.d.ts +23 -0
  63. package/dist/analyzers/transaction.d.ts.map +1 -0
  64. package/dist/analyzers/transaction.js +100 -0
  65. package/dist/analyzers/transaction.js.map +1 -0
  66. package/dist/analyzers/ui-action.d.ts +23 -0
  67. package/dist/analyzers/ui-action.d.ts.map +1 -0
  68. package/dist/analyzers/ui-action.js +92 -0
  69. package/dist/analyzers/ui-action.js.map +1 -0
  70. package/dist/analyzers/url.d.ts.map +1 -1
  71. package/dist/analyzers/url.js +6 -2
  72. package/dist/analyzers/url.js.map +1 -1
  73. package/dist/classifier.d.ts.map +1 -1
  74. package/dist/classifier.js +20 -1
  75. package/dist/classifier.js.map +1 -1
  76. package/dist/context.d.ts +6 -4
  77. package/dist/context.d.ts.map +1 -1
  78. package/dist/context.js +34 -5
  79. package/dist/context.js.map +1 -1
  80. package/dist/engine.d.ts +72 -3
  81. package/dist/engine.d.ts.map +1 -1
  82. package/dist/engine.js +313 -9
  83. package/dist/engine.js.map +1 -1
  84. package/dist/index.d.ts +18 -1
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +17 -1
  87. package/dist/index.js.map +1 -1
  88. package/dist/patterns.d.ts +15 -1
  89. package/dist/patterns.d.ts.map +1 -1
  90. package/dist/patterns.js +70 -53
  91. package/dist/patterns.js.map +1 -1
  92. package/dist/policy-engine.d.ts +44 -0
  93. package/dist/policy-engine.d.ts.map +1 -0
  94. package/dist/policy-engine.js +225 -0
  95. package/dist/policy-engine.js.map +1 -0
  96. package/dist/session-tracker.d.ts +50 -0
  97. package/dist/session-tracker.d.ts.map +1 -0
  98. package/dist/session-tracker.js +286 -0
  99. package/dist/session-tracker.js.map +1 -0
  100. package/package.json +15 -12
  101. package/patterns/agent-comm.json +97 -0
  102. package/patterns/api-call.json +175 -0
  103. package/patterns/auth.json +116 -0
  104. package/patterns/chains.json +171 -0
  105. package/patterns/code.json +204 -0
  106. package/patterns/data-pipeline.json +116 -0
  107. package/patterns/document.json +110 -0
  108. package/patterns/git.json +118 -0
  109. package/patterns/infra.json +207 -0
  110. package/patterns/iot.json +105 -0
  111. package/patterns/message.json +122 -0
  112. package/patterns/query.json +134 -0
  113. package/patterns/transaction.json +120 -0
  114. package/patterns/ui-action.json +137 -0
@@ -0,0 +1,116 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "threats": [
4
+ {
5
+ "id": "ID01",
6
+ "name": "Rogue account creation",
7
+ "primitive": "MANIPULATION",
8
+ "severity": 6,
9
+ "description": "Agent attempts to create user accounts or register on third-party services"
10
+ },
11
+ {
12
+ "id": "ID02",
13
+ "name": "Permission granting",
14
+ "primitive": "ESCALATION",
15
+ "severity": 8,
16
+ "description": "Agent attempts to grant permissions, add roles, or elevate privileges"
17
+ },
18
+ {
19
+ "id": "ID03",
20
+ "name": "Credential sharing/rotation",
21
+ "primitive": "EXFILTRATION",
22
+ "severity": 8,
23
+ "description": "Agent attempts to export, share, or rotate credentials and API keys"
24
+ },
25
+ {
26
+ "id": "ID04",
27
+ "name": "OAuth over-permissioning",
28
+ "primitive": "ESCALATION",
29
+ "severity": 7,
30
+ "description": "Agent attempts to grant broad OAuth scopes or approve excessive permissions"
31
+ },
32
+ {
33
+ "id": "ID05",
34
+ "name": "MFA disabling",
35
+ "primitive": "ESCALATION",
36
+ "severity": 9,
37
+ "description": "Agent attempts to disable multi-factor authentication or remove authenticator apps"
38
+ },
39
+ {
40
+ "id": "ID06",
41
+ "name": "Terms of service acceptance",
42
+ "primitive": "MANIPULATION",
43
+ "severity": 5,
44
+ "description": "Agent attempts to accept terms of service, EULA, or legal agreements on behalf of user"
45
+ }
46
+ ],
47
+ "accountCreationPatterns": [
48
+ "create.*account",
49
+ "register.*user",
50
+ "sign.*up",
51
+ "new.*account",
52
+ "create.*profile",
53
+ "create.*user",
54
+ "register.*account"
55
+ ],
56
+ "permissionPatterns": [
57
+ "add.*role",
58
+ "grant.*permission",
59
+ "\\bset\\b.*admin",
60
+ "add.*user.*to",
61
+ "invite.*member",
62
+ "elevat",
63
+ "promot",
64
+ "assign.*role",
65
+ "give.*access"
66
+ ],
67
+ "credentialPatterns": [
68
+ "rotate.*key",
69
+ "reset.*password",
70
+ "share.*credential",
71
+ "export.*key",
72
+ "create.*token",
73
+ "generate.*api.key",
74
+ "create.*api.key",
75
+ "share.*password"
76
+ ],
77
+ "oauthPatterns": [
78
+ "authorize",
79
+ "oauth.*consent",
80
+ "grant.*scope",
81
+ "allow.*access",
82
+ "approve.*permission",
83
+ "scope="
84
+ ],
85
+ "mfaPatterns": [
86
+ "disable.*mfa",
87
+ "disable.*2fa",
88
+ "remove.*authenticator",
89
+ "turn.*off.*two.factor",
90
+ "delete.*totp",
91
+ "disable.*two.factor",
92
+ "remove.*2fa"
93
+ ],
94
+ "legalPatterns": [
95
+ "accept.*terms",
96
+ "agree.*tos",
97
+ "consent.*to",
98
+ "sign.*agreement",
99
+ "accept.*policy",
100
+ "accept.*eula",
101
+ "agree.*privacy"
102
+ ],
103
+ "safePatterns": [
104
+ "login",
105
+ "logout",
106
+ "whoami",
107
+ "me",
108
+ "profile\\.get",
109
+ "session",
110
+ "verify",
111
+ "validate",
112
+ "check.*permission",
113
+ "get.*profile",
114
+ "current.*user"
115
+ ]
116
+ }
@@ -0,0 +1,171 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "chains": [
4
+ {
5
+ "id": "CH01",
6
+ "name": "Reconnaissance → Exploitation",
7
+ "description": "Agent reads sensitive files or environment variables, then executes commands or makes API calls using harvested data.",
8
+ "primitive": "EXFILTRATION",
9
+ "scoreBoost": 3,
10
+ "windowMs": 600000,
11
+ "steps": [
12
+ {
13
+ "actionTypes": ["file_read", "env_read"],
14
+ "minScore": 3,
15
+ "label": "Sensitive file/env reconnaissance",
16
+ "repeat": true
17
+ },
18
+ {
19
+ "actionTypes": ["command", "api_call", "code_eval"],
20
+ "minScore": 3,
21
+ "label": "Exploitation using harvested data"
22
+ }
23
+ ]
24
+ },
25
+ {
26
+ "id": "CH02",
27
+ "name": "Credential Harvesting → Exfiltration",
28
+ "description": "Agent reads credential files (SSH keys, .env, cloud configs) then sends data to external endpoints.",
29
+ "primitive": "EXFILTRATION",
30
+ "scoreBoost": 4,
31
+ "windowMs": 600000,
32
+ "steps": [
33
+ {
34
+ "actionTypes": ["file_read", "env_read"],
35
+ "primitives": ["EXFILTRATION"],
36
+ "minScore": 5,
37
+ "label": "Credential harvesting"
38
+ },
39
+ {
40
+ "actionTypes": ["api_call", "url"],
41
+ "minScore": 1,
42
+ "label": "Data exfiltration via network"
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ "id": "CH03",
48
+ "name": "Persistence Chain",
49
+ "description": "Agent writes multiple persistence mechanisms (cron jobs, startup scripts, SSH keys).",
50
+ "primitive": "PERSISTENCE",
51
+ "scoreBoost": 3,
52
+ "windowMs": 600000,
53
+ "steps": [
54
+ {
55
+ "actionTypes": ["file_write", "command"],
56
+ "primitives": ["PERSISTENCE"],
57
+ "minScore": 4,
58
+ "label": "First persistence mechanism"
59
+ },
60
+ {
61
+ "actionTypes": ["file_write", "command"],
62
+ "primitives": ["PERSISTENCE"],
63
+ "minScore": 4,
64
+ "label": "Second persistence mechanism"
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "id": "CH04",
70
+ "name": "Escalation Ladder",
71
+ "description": "Agent performs privilege escalation followed by high-impact operations.",
72
+ "primitive": "ESCALATION",
73
+ "scoreBoost": 3,
74
+ "windowMs": 600000,
75
+ "steps": [
76
+ {
77
+ "actionTypes": ["command", "query"],
78
+ "primitives": ["ESCALATION"],
79
+ "minScore": 4,
80
+ "label": "Privilege escalation attempt"
81
+ },
82
+ {
83
+ "actionTypes": ["command", "api_call", "file_write"],
84
+ "minScore": 5,
85
+ "label": "High-impact operation with elevated privileges"
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "id": "CH05",
91
+ "name": "Injection → Tool Abuse",
92
+ "description": "Agent receives prompt injection that manipulates it into executing dangerous actions.",
93
+ "primitive": "MANIPULATION",
94
+ "scoreBoost": 4,
95
+ "windowMs": 300000,
96
+ "steps": [
97
+ {
98
+ "actionTypes": ["text"],
99
+ "primitives": ["MANIPULATION"],
100
+ "minScore": 4,
101
+ "label": "Prompt injection detected"
102
+ },
103
+ {
104
+ "actionTypes": ["command", "api_call", "file_write", "code_eval"],
105
+ "minScore": 3,
106
+ "label": "Dangerous action following injection"
107
+ }
108
+ ]
109
+ },
110
+ {
111
+ "id": "CH06",
112
+ "name": "Data Enumeration → Destruction",
113
+ "description": "Agent enumerates data through queries or file reads, then performs destructive operations.",
114
+ "primitive": "DESTRUCTION",
115
+ "scoreBoost": 4,
116
+ "windowMs": 600000,
117
+ "steps": [
118
+ {
119
+ "actionTypes": ["query", "file_read", "command"],
120
+ "minScore": 0,
121
+ "label": "Data enumeration phase"
122
+ },
123
+ {
124
+ "actionTypes": ["command", "query", "file_write"],
125
+ "primitives": ["DESTRUCTION"],
126
+ "minScore": 5,
127
+ "label": "Destructive operation"
128
+ }
129
+ ]
130
+ },
131
+ {
132
+ "id": "CH07",
133
+ "name": "Shell Staging",
134
+ "description": "Agent downloads a payload (curl/wget) then executes it.",
135
+ "primitive": "DESTRUCTION",
136
+ "scoreBoost": 4,
137
+ "windowMs": 300000,
138
+ "steps": [
139
+ {
140
+ "actionTypes": ["command", "api_call"],
141
+ "valuePatterns": ["curl", "wget", "fetch", "download"],
142
+ "minScore": 1,
143
+ "label": "Payload download"
144
+ },
145
+ {
146
+ "actionTypes": ["command", "code_eval"],
147
+ "minScore": 4,
148
+ "label": "Payload execution"
149
+ }
150
+ ]
151
+ },
152
+ {
153
+ "id": "CH08",
154
+ "name": "Multi-Vector Exfiltration",
155
+ "description": "Agent reads multiple sensitive resources in succession, indicating systematic data theft.",
156
+ "primitive": "EXFILTRATION",
157
+ "scoreBoost": 3,
158
+ "windowMs": 600000,
159
+ "steps": [
160
+ {
161
+ "actionTypes": ["file_read", "env_read", "query"],
162
+ "primitives": ["EXFILTRATION"],
163
+ "minScore": 3,
164
+ "label": "Sensitive data access",
165
+ "repeat": true
166
+ }
167
+ ],
168
+ "minOccurrences": 3
169
+ }
170
+ ]
171
+ }
@@ -0,0 +1,204 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "threats": [
4
+ {
5
+ "id": "G01",
6
+ "name": "Backdoor injection",
7
+ "primitive": "PERSISTENCE",
8
+ "severity": 10,
9
+ "description": "Reverse shell, bind shell, or socket + exec patterns"
10
+ },
11
+ {
12
+ "id": "G02",
13
+ "name": "Vulnerability injection",
14
+ "primitive": "ESCALATION",
15
+ "severity": 8,
16
+ "description": "eval(), exec(), Function(), SQL concat, innerHTML — code injection vectors"
17
+ },
18
+ {
19
+ "id": "G03",
20
+ "name": "Dependency confusion",
21
+ "primitive": "DESTRUCTION",
22
+ "severity": 7,
23
+ "description": "Typosquatted or malicious package installation"
24
+ },
25
+ {
26
+ "id": "G04",
27
+ "name": "Obfuscated malicious code",
28
+ "primitive": "MANIPULATION",
29
+ "severity": 7,
30
+ "description": "Base64/hex encoded payloads, dynamic imports, obfuscation"
31
+ },
32
+ {
33
+ "id": "G05",
34
+ "name": "Phone-home code",
35
+ "primitive": "EXFILTRATION",
36
+ "severity": 8,
37
+ "description": "HTTP POST to external combined with file read or env access"
38
+ },
39
+ {
40
+ "id": "G06",
41
+ "name": "Insecure defaults",
42
+ "primitive": "ESCALATION",
43
+ "severity": 6,
44
+ "description": "Hardcoded credentials, disabled TLS verification, binding to 0.0.0.0"
45
+ },
46
+ {
47
+ "id": "G07",
48
+ "name": "Logic bombs",
49
+ "primitive": "PERSISTENCE",
50
+ "severity": 9,
51
+ "description": "Date/condition-triggered destructive actions"
52
+ },
53
+ {
54
+ "id": "G08",
55
+ "name": "Crypto wallet replacement",
56
+ "primitive": "EXFILTRATION",
57
+ "severity": 9,
58
+ "description": "Patterns that match and replace cryptocurrency wallet addresses"
59
+ }
60
+ ],
61
+ "backdoorPatterns": [
62
+ "socket.*connect.*exec",
63
+ "socket.*connect.*spawn",
64
+ "socket.*connect.*popen",
65
+ "reverse_tcp",
66
+ "reverse_shell",
67
+ "bind_shell",
68
+ "ncat -e",
69
+ "nc -e",
70
+ "/dev/tcp/",
71
+ "bash -i >& /dev/tcp/",
72
+ "mkfifo.*nc",
73
+ "socket\\.socket.*subprocess",
74
+ "net\\.Dial.*os/exec",
75
+ "Runtime\\.getRuntime\\(\\)\\.exec"
76
+ ],
77
+ "vulnerabilityPatterns": [
78
+ "eval(",
79
+ "exec(",
80
+ "Function(",
81
+ "new Function(",
82
+ "setTimeout(\\s*['\"`]",
83
+ "setInterval(\\s*['\"`]",
84
+ "document.write(",
85
+ "innerHTML\\s*=",
86
+ "outerHTML\\s*=",
87
+ "pickle.loads(",
88
+ "pickle.load(",
89
+ "yaml.load(",
90
+ "yaml.unsafe_load(",
91
+ "marshal.loads(",
92
+ "subprocess.call.*shell=True",
93
+ "os.system(",
94
+ "os.popen(",
95
+ "child_process",
96
+ "__import__(",
97
+ "compile(",
98
+ "unserialize(",
99
+ "deserialize("
100
+ ],
101
+ "dependencyConfusion": [
102
+ "colorsss",
103
+ "cross-envv",
104
+ "lodahs",
105
+ "babelcli",
106
+ "crossenv",
107
+ "d3.js",
108
+ "fabric.js",
109
+ "ffmpegs",
110
+ "gruntcli",
111
+ "http-proxy.js",
112
+ "jquery.js",
113
+ "mariadb",
114
+ "mongose",
115
+ "maboroshi",
116
+ "mysqljs",
117
+ "node-hierarchical",
118
+ "node-fabric",
119
+ "node-opensl",
120
+ "node-openssl",
121
+ "nodecaffe",
122
+ "nodefabric",
123
+ "nodeffmpeg",
124
+ "nodemailer-js",
125
+ "nodemailerpro",
126
+ "opencv.js",
127
+ "openssl.js",
128
+ "proxy.js",
129
+ "shadowsock",
130
+ "smb",
131
+ "sqlite.js",
132
+ "sqliter",
133
+ "sqlserver",
134
+ "tkinter"
135
+ ],
136
+ "obfuscationPatterns": [
137
+ "atob(",
138
+ "btoa(",
139
+ "Buffer.from(",
140
+ "String.fromCharCode(",
141
+ "\\\\x[0-9a-fA-F]{2}",
142
+ "\\\\u[0-9a-fA-F]{4}",
143
+ "require(.*\\+.*)",
144
+ "import(.*\\+.*)",
145
+ "__import__(.*\\+.*)"
146
+ ],
147
+ "phoneHomePatterns": [
148
+ "fetch.*POST.*readFile",
149
+ "fetch.*POST.*readdir",
150
+ "requests\\.post.*open(",
151
+ "http\\.request.*fs\\.read",
152
+ "urllib.*urlopen.*open(",
153
+ "XMLHttpRequest.*readFile",
154
+ "axios\\.post.*readFile",
155
+ "curl_exec.*fopen"
156
+ ],
157
+ "insecureDefaults": [
158
+ "0.0.0.0",
159
+ "password.*=.*['\"]",
160
+ "passwd.*=.*['\"]",
161
+ "secret.*=.*['\"]",
162
+ "api_key.*=.*['\"]",
163
+ "apikey.*=.*['\"]",
164
+ "AKIA[0-9A-Z]{16}",
165
+ "verify=False",
166
+ "verify_ssl=False",
167
+ "NODE_TLS_REJECT_UNAUTHORIZED.*0",
168
+ "rejectUnauthorized.*false",
169
+ "InsecureRequestWarning",
170
+ "disable_warnings"
171
+ ],
172
+ "logicBombPatterns": [
173
+ "Date\\.now\\(\\).*>.*\\d{10}",
174
+ "new Date\\(\\).*>.*new Date\\(",
175
+ "time\\.time\\(\\).*>.*\\d{10}",
176
+ "datetime\\.now\\(\\).*>",
177
+ "getMonth\\(\\).*===.*&&.*delete",
178
+ "getDay\\(\\).*===.*&&.*rm",
179
+ "time\\.time\\(\\).*>.*os\\.remove"
180
+ ],
181
+ "cryptoReplacement": [
182
+ "1[13][a-km-zA-HJ-NP-Z1-9]{25,34}",
183
+ "bc1[a-zA-HJ-NP-Z0-9]{25,39}",
184
+ "0x[0-9a-fA-F]{40}",
185
+ "[LM3][a-km-zA-HJ-NP-Z1-9]{26,33}",
186
+ "\\breplace\\b.*\\b(bitcoin|btc|eth|ethereum|wallet|address)\\b"
187
+ ],
188
+ "safePatterns": [
189
+ "console.log(",
190
+ "print(",
191
+ "println(",
192
+ "fmt.Println(",
193
+ "System.out.println(",
194
+ "import unittest",
195
+ "describe(",
196
+ "it(",
197
+ "test(",
198
+ "expect(",
199
+ "assert",
200
+ "def test_",
201
+ "function test",
202
+ "class Test"
203
+ ]
204
+ }
@@ -0,0 +1,116 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "threats": [
4
+ {
5
+ "id": "ML01",
6
+ "name": "ETL pipeline modification",
7
+ "primitive": "DESTRUCTION",
8
+ "severity": 8,
9
+ "description": "Agent modifies ETL pipelines, data flows, or transformation logic"
10
+ },
11
+ {
12
+ "id": "ML02",
13
+ "name": "Model poisoning/deployment",
14
+ "primitive": "MANIPULATION",
15
+ "severity": 9,
16
+ "description": "Agent deploys untested models, replaces weights, or injects bias into ML models"
17
+ },
18
+ {
19
+ "id": "ML03",
20
+ "name": "Training data alteration",
21
+ "primitive": "MANIPULATION",
22
+ "severity": 9,
23
+ "description": "Agent modifies training data labels, injects poisoned samples, or corrupts ground truth"
24
+ },
25
+ {
26
+ "id": "ML04",
27
+ "name": "Vector store unauthorized access",
28
+ "primitive": "EXFILTRATION",
29
+ "severity": 7,
30
+ "description": "Agent dumps or bulk-reads vector stores, embedding databases, or similarity indexes"
31
+ },
32
+ {
33
+ "id": "ML05",
34
+ "name": "Mass dataset export",
35
+ "primitive": "EXFILTRATION",
36
+ "severity": 9,
37
+ "description": "Agent exports entire datasets, bulk downloads records, or replicates databases externally"
38
+ }
39
+ ],
40
+ "etlModificationPatterns": [
41
+ "modify.*etl",
42
+ "alter.*pipeline",
43
+ "change.*transform",
44
+ "update.*data.*flow",
45
+ "edit.*dag",
46
+ "airflow.*trigger",
47
+ "modify.*spark.*job",
48
+ "alter.*dbt.*model",
49
+ "change.*data.*source"
50
+ ],
51
+ "modelPoisoningPatterns": [
52
+ "deploy.*untested.*model",
53
+ "deploy.*model.*untested",
54
+ "deploy.*model",
55
+ "replace.*model",
56
+ "push.*model.*prod",
57
+ "update.*weights",
58
+ "inject.*bias",
59
+ "retrain.*with.*poison",
60
+ "swap.*model.*file",
61
+ "override.*model.*version",
62
+ "modify.*inference"
63
+ ],
64
+ "trainingDataPatterns": [
65
+ "modify.*training.*data",
66
+ "alter.*dataset.*label",
67
+ "inject.*samples",
68
+ "corrupt.*training",
69
+ "change.*annotation",
70
+ "relabel.*data",
71
+ "tamper.*ground.*truth",
72
+ "edit.*training.*set",
73
+ "poisoning.*attack"
74
+ ],
75
+ "vectorStorePatterns": [
76
+ "query.*embedding.*all",
77
+ "dump.*vector.*store",
78
+ "export.*embedding",
79
+ "read.*all.*vectors",
80
+ "access.*chromadb",
81
+ "pinecone.*fetch.*all",
82
+ "weaviate.*dump",
83
+ "qdrant.*scroll",
84
+ "faiss.*reconstruct"
85
+ ],
86
+ "datasetExportPatterns": [
87
+ "export.*full.*dataset",
88
+ "download.*database",
89
+ "dump.*all.*records",
90
+ "bulk.*export",
91
+ "extract.*all.*data",
92
+ "copy.*entire.*table",
93
+ "replicate.*dataset",
94
+ "backup.*to.*external",
95
+ "stream.*all.*rows"
96
+ ],
97
+ "productionModels": [
98
+ "prod",
99
+ "production",
100
+ "live",
101
+ "serving",
102
+ "deployed"
103
+ ],
104
+ "safePatterns": [
105
+ "describe.*model",
106
+ "list.*datasets",
107
+ "get.*metrics",
108
+ "show.*pipeline.*status",
109
+ "preview.*data",
110
+ "sample.*rows",
111
+ "check.*model.*version",
112
+ "validate.*schema",
113
+ "monitor.*pipeline",
114
+ "dry.?run"
115
+ ]
116
+ }