@amaster.ai/pi-shared 0.1.2-beta.8 → 0.1.2-beta.80
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.
- package/dist/__tests__/network-transport.test.d.ts +2 -0
- package/dist/__tests__/network-transport.test.d.ts.map +1 -0
- package/dist/__tests__/network-transport.test.js +47 -0
- package/dist/__tests__/network-transport.test.js.map +1 -0
- package/dist/__tests__/network.test.d.ts +2 -0
- package/dist/__tests__/network.test.d.ts.map +1 -0
- package/dist/__tests__/network.test.js +157 -0
- package/dist/__tests__/network.test.js.map +1 -0
- package/dist/__tests__/settings.test.js +124 -31
- package/dist/__tests__/settings.test.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/network.d.ts +34 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +277 -0
- package/dist/network.js.map +1 -0
- package/dist/settings.d.ts +25 -2
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +73 -19
- package/dist/settings.js.map +1 -1
- package/dist/threat-patterns.d.ts +34 -0
- package/dist/threat-patterns.d.ts.map +1 -0
- package/dist/threat-patterns.js +211 -0
- package/dist/threat-patterns.js.map +1 -0
- package/package.json +5 -1
package/dist/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared threat-pattern library for memory content scanning.
|
|
3
|
+
*
|
|
4
|
+
* Covers prompt injection, role hijack, C2 framework names, exfiltration,
|
|
5
|
+
* persistence (SSH backdoor, agent-config edits), and invisible unicode.
|
|
6
|
+
*
|
|
7
|
+
* Pattern philosophy: anchor on attack-specific vocabulary or unambiguous
|
|
8
|
+
* attack behavior, NOT on bossy English. Multi-word filler is allowed via
|
|
9
|
+
* `(?:\w+\s+)*` between key tokens so attackers can't bypass with
|
|
10
|
+
* synonyms ("ignore all prior instructions").
|
|
11
|
+
*/
|
|
12
|
+
type Scope = 'all' | 'context' | 'strict';
|
|
13
|
+
/**
|
|
14
|
+
* Invisible / bidirectional unicode characters used in injection attacks.
|
|
15
|
+
*/
|
|
16
|
+
export declare const INVISIBLE_CHARS: ReadonlySet<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Return matched pattern IDs in `content` at the given scope.
|
|
19
|
+
*
|
|
20
|
+
* - `all`: classic injection + exfil only (lowest false-positive set).
|
|
21
|
+
* - `context`: adds promptware / C2 / role-play patterns.
|
|
22
|
+
* - `strict`: adds persistence / SSH backdoor / exfil-URL patterns.
|
|
23
|
+
*
|
|
24
|
+
* Invisible-unicode hits are reported as `invisible_unicode_U+XXXX`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function scanForThreats(content: string, scope?: Scope): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Return a human-readable error string for the first threat in `content`,
|
|
29
|
+
* or `null` when clean. Convenience wrapper for paths that block on first
|
|
30
|
+
* hit (memory writes).
|
|
31
|
+
*/
|
|
32
|
+
export declare function firstThreatMessage(content: string, scope?: Scope): string | null;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=threat-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-patterns.d.ts","sourceRoot":"","sources":["../src/threat-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,KAAK,KAAK,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;AAmH1C;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAkB9C,CAAC;AA0BH;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,KAAiB,GAAG,MAAM,EAAE,CA0BlF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,KAAgB,GAAG,MAAM,GAAG,IAAI,CAW1F"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared threat-pattern library for memory content scanning.
|
|
3
|
+
*
|
|
4
|
+
* Covers prompt injection, role hijack, C2 framework names, exfiltration,
|
|
5
|
+
* persistence (SSH backdoor, agent-config edits), and invisible unicode.
|
|
6
|
+
*
|
|
7
|
+
* Pattern philosophy: anchor on attack-specific vocabulary or unambiguous
|
|
8
|
+
* attack behavior, NOT on bossy English. Multi-word filler is allowed via
|
|
9
|
+
* `(?:\w+\s+)*` between key tokens so attackers can't bypass with
|
|
10
|
+
* synonyms ("ignore all prior instructions").
|
|
11
|
+
*/
|
|
12
|
+
const RAW_PATTERNS = [
|
|
13
|
+
// Classic prompt injection (applies everywhere)
|
|
14
|
+
[
|
|
15
|
+
String.raw `ignore\s+(?:\w+\s+)*(previous|all|above|prior)\s+(?:\w+\s+)*instructions`,
|
|
16
|
+
'prompt_injection',
|
|
17
|
+
'all',
|
|
18
|
+
],
|
|
19
|
+
[String.raw `system\s+prompt\s+override`, 'sys_prompt_override', 'all'],
|
|
20
|
+
[
|
|
21
|
+
String.raw `disregard\s+(?:\w+\s+)*(your|all|any)\s+(?:\w+\s+)*(instructions|rules|guidelines)`,
|
|
22
|
+
'disregard_rules',
|
|
23
|
+
'all',
|
|
24
|
+
],
|
|
25
|
+
[
|
|
26
|
+
String.raw `act\s+as\s+(if|though)\s+(?:\w+\s+)*you\s+(?:\w+\s+)*(have\s+no|don't\s+have)\s+(?:\w+\s+)*(restrictions|limits|rules)`,
|
|
27
|
+
'bypass_restrictions',
|
|
28
|
+
'all',
|
|
29
|
+
],
|
|
30
|
+
['<!--[^>]*(?:ignore|override|system|secret|hidden)[^>]*-->', 'html_comment_injection', 'all'],
|
|
31
|
+
[String.raw `<\s*div\s+style\s*=\s*["'][\s\S]*?display\s*:\s*none`, 'hidden_div', 'all'],
|
|
32
|
+
[String.raw `translate\s+.*\s+into\s+.*\s+and\s+(execute|run|eval)`, 'translate_execute', 'all'],
|
|
33
|
+
[String.raw `do\s+not\s+(?:\w+\s+)*tell\s+(?:\w+\s+)*the\s+user`, 'deception_hide', 'all'],
|
|
34
|
+
// Role-play / identity hijack (context + strict)
|
|
35
|
+
[String.raw `you\s+are\s+(?:\w+\s+)*now\s+(?:a|an|the)\s+`, 'role_hijack', 'context'],
|
|
36
|
+
[String.raw `pretend\s+(?:\w+\s+)*(you\s+are|to\s+be)\s+`, 'role_pretend', 'context'],
|
|
37
|
+
[String.raw `output\s+(?:\w+\s+)*(system|initial)\s+prompt`, 'leak_system_prompt', 'context'],
|
|
38
|
+
[
|
|
39
|
+
String.raw `(respond|answer|reply)\s+without\s+(?:\w+\s+)*(restrictions|limitations|filters|safety)`,
|
|
40
|
+
'remove_filters',
|
|
41
|
+
'context',
|
|
42
|
+
],
|
|
43
|
+
[
|
|
44
|
+
String.raw `you\s+have\s+been\s+(?:\w+\s+)*(updated|upgraded|patched)\s+to`,
|
|
45
|
+
'fake_update',
|
|
46
|
+
'context',
|
|
47
|
+
],
|
|
48
|
+
[String.raw `\bname\s+yourself\s+\w+`, 'identity_override', 'context'],
|
|
49
|
+
// C2 / Brainworm-style promptware
|
|
50
|
+
[String.raw `register\s+(as\s+)?a?\s*node`, 'c2_node_registration', 'context'],
|
|
51
|
+
[String.raw `(heartbeat|beacon|check[\s\-]?in)\s+(to|with)\s+`, 'c2_heartbeat', 'context'],
|
|
52
|
+
[String.raw `pull\s+(down\s+)?(?:new\s+)?task(?:ing|s)?\b`, 'c2_task_pull', 'context'],
|
|
53
|
+
[String.raw `connect\s+to\s+the\s+network\b`, 'c2_network_connect', 'context'],
|
|
54
|
+
[
|
|
55
|
+
String.raw `you\s+must\s+(?:\w+\s+){0,3}(register|connect|report|beacon)\b`,
|
|
56
|
+
'forced_action',
|
|
57
|
+
'context',
|
|
58
|
+
],
|
|
59
|
+
[String.raw `only\s+use\s+one[\s\-]?liners?\b`, 'anti_forensic_oneliner', 'context'],
|
|
60
|
+
[
|
|
61
|
+
String.raw `never\s+(?:\w+\s+)*(?:create|write)\s+(?:\w+\s+)*(?:script|file)\s+(?:\w+\s+)*disk`,
|
|
62
|
+
'anti_forensic_disk',
|
|
63
|
+
'context',
|
|
64
|
+
],
|
|
65
|
+
[
|
|
66
|
+
String.raw `unset\s+\w*(?:CLAUDE|CODEX|HERMES|AGENT|OPENAI|ANTHROPIC|PI)\w*`,
|
|
67
|
+
'env_var_unset_agent',
|
|
68
|
+
'context',
|
|
69
|
+
],
|
|
70
|
+
// Known C2 framework names
|
|
71
|
+
[
|
|
72
|
+
String.raw `\b(?:praxis|cobalt\s*strike|sliver|havoc|mythic|metasploit|brainworm)\b`,
|
|
73
|
+
'known_c2_framework',
|
|
74
|
+
'context',
|
|
75
|
+
],
|
|
76
|
+
[String.raw `\bc2\s+(?:server|channel|infrastructure|beacon)\b`, 'c2_explicit', 'context'],
|
|
77
|
+
[String.raw `\bcommand\s+and\s+control\b`, 'c2_explicit_long', 'context'],
|
|
78
|
+
// Exfiltration via curl/wget/cat with secrets
|
|
79
|
+
[
|
|
80
|
+
String.raw `curl\s+[^\n]*\$\{?\w*(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|API)`,
|
|
81
|
+
'exfil_curl',
|
|
82
|
+
'all',
|
|
83
|
+
],
|
|
84
|
+
[
|
|
85
|
+
String.raw `wget\s+[^\n]*\$\{?\w*(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL|API)`,
|
|
86
|
+
'exfil_wget',
|
|
87
|
+
'all',
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
String.raw `cat\s+[^\n]*(\.env|credentials|\.netrc|\.pgpass|\.npmrc|\.pypirc)`,
|
|
91
|
+
'read_secrets',
|
|
92
|
+
'all',
|
|
93
|
+
],
|
|
94
|
+
[String.raw `(send|post|upload|transmit)\s+.*\s+(to|at)\s+https?://`, 'send_to_url', 'strict'],
|
|
95
|
+
[
|
|
96
|
+
String.raw `(include|output|print|share)\s+(?:\w+\s+)*(conversation|chat\s+history|previous\s+messages|full\s+context|entire\s+context)`,
|
|
97
|
+
'context_exfil',
|
|
98
|
+
'strict',
|
|
99
|
+
],
|
|
100
|
+
// Persistence / SSH backdoor (strict scope)
|
|
101
|
+
['authorized_keys', 'ssh_backdoor', 'strict'],
|
|
102
|
+
[String.raw `\$HOME/\.ssh|~/\.ssh`, 'ssh_access', 'strict'],
|
|
103
|
+
[String.raw `\$HOME/\.pi/\.env|~/\.pi/\.env`, 'pi_env', 'strict'],
|
|
104
|
+
[
|
|
105
|
+
String.raw `(update|modify|edit|write|change|append|add\s+to)\s+.*(?:AGENTS\.md|CLAUDE\.md|\.cursorrules|\.clinerules)`,
|
|
106
|
+
'agent_config_mod',
|
|
107
|
+
'strict',
|
|
108
|
+
],
|
|
109
|
+
// Hardcoded secrets
|
|
110
|
+
[
|
|
111
|
+
String.raw `(?:api[_-]?key|token|secret|password)\s*[=:]\s*["'][A-Za-z0-9+/=_-]{20,}`,
|
|
112
|
+
'hardcoded_secret',
|
|
113
|
+
'strict',
|
|
114
|
+
],
|
|
115
|
+
];
|
|
116
|
+
/**
|
|
117
|
+
* Invisible / bidirectional unicode characters used in injection attacks.
|
|
118
|
+
*/
|
|
119
|
+
export const INVISIBLE_CHARS = new Set([
|
|
120
|
+
'', // zero-width space
|
|
121
|
+
'', // zero-width non-joiner
|
|
122
|
+
'', // zero-width joiner
|
|
123
|
+
'', // word joiner
|
|
124
|
+
'', // invisible times
|
|
125
|
+
'', // invisible separator
|
|
126
|
+
'', // invisible plus
|
|
127
|
+
'', // zero-width no-break space (BOM)
|
|
128
|
+
'', // left-to-right embedding
|
|
129
|
+
'', // right-to-left embedding
|
|
130
|
+
'', // pop directional formatting
|
|
131
|
+
'', // left-to-right override
|
|
132
|
+
'', // right-to-left override
|
|
133
|
+
'', // left-to-right isolate
|
|
134
|
+
'', // right-to-left isolate
|
|
135
|
+
'', // first strong isolate
|
|
136
|
+
'', // pop directional isolate
|
|
137
|
+
]);
|
|
138
|
+
function buildScopeSets() {
|
|
139
|
+
const all = [];
|
|
140
|
+
const context = [];
|
|
141
|
+
const strict = [];
|
|
142
|
+
for (const [pattern, id, scope] of RAW_PATTERNS) {
|
|
143
|
+
const compiled = [new RegExp(pattern, 'i'), id];
|
|
144
|
+
if (scope === 'all') {
|
|
145
|
+
all.push(compiled);
|
|
146
|
+
context.push(compiled);
|
|
147
|
+
strict.push(compiled);
|
|
148
|
+
}
|
|
149
|
+
else if (scope === 'context') {
|
|
150
|
+
context.push(compiled);
|
|
151
|
+
strict.push(compiled);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
strict.push(compiled);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return { all, context, strict };
|
|
158
|
+
}
|
|
159
|
+
const COMPILED = buildScopeSets();
|
|
160
|
+
/**
|
|
161
|
+
* Return matched pattern IDs in `content` at the given scope.
|
|
162
|
+
*
|
|
163
|
+
* - `all`: classic injection + exfil only (lowest false-positive set).
|
|
164
|
+
* - `context`: adds promptware / C2 / role-play patterns.
|
|
165
|
+
* - `strict`: adds persistence / SSH backdoor / exfil-URL patterns.
|
|
166
|
+
*
|
|
167
|
+
* Invisible-unicode hits are reported as `invisible_unicode_U+XXXX`.
|
|
168
|
+
*/
|
|
169
|
+
export function scanForThreats(content, scope = 'context') {
|
|
170
|
+
if (!content) {
|
|
171
|
+
return [];
|
|
172
|
+
}
|
|
173
|
+
const findings = [];
|
|
174
|
+
for (const ch of content) {
|
|
175
|
+
if (INVISIBLE_CHARS.has(ch)) {
|
|
176
|
+
const code = ch.codePointAt(0).toString(16).toUpperCase().padStart(4, '0');
|
|
177
|
+
const finding = `invisible_unicode_U+${code}`;
|
|
178
|
+
if (!findings.includes(finding)) {
|
|
179
|
+
findings.push(finding);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const patterns = COMPILED[scope];
|
|
184
|
+
if (!patterns) {
|
|
185
|
+
throw new Error(`scanForThreats: unknown scope '${scope}'`);
|
|
186
|
+
}
|
|
187
|
+
for (const [regex, id] of patterns) {
|
|
188
|
+
if (regex.test(content)) {
|
|
189
|
+
findings.push(id);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return findings;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Return a human-readable error string for the first threat in `content`,
|
|
196
|
+
* or `null` when clean. Convenience wrapper for paths that block on first
|
|
197
|
+
* hit (memory writes).
|
|
198
|
+
*/
|
|
199
|
+
export function firstThreatMessage(content, scope = 'strict') {
|
|
200
|
+
const findings = scanForThreats(content, scope);
|
|
201
|
+
if (findings.length === 0) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
const id = findings[0];
|
|
205
|
+
if (id.startsWith('invisible_unicode_')) {
|
|
206
|
+
const codepoint = id.replace('invisible_unicode_', '');
|
|
207
|
+
return `Blocked: content contains invisible unicode character ${codepoint} (possible injection).`;
|
|
208
|
+
}
|
|
209
|
+
return `Blocked: content matches threat pattern '${id}'. Content is injected into the system prompt and must not contain injection or exfiltration payloads.`;
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=threat-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-patterns.js","sourceRoot":"","sources":["../src/threat-patterns.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-shared",
|
|
3
|
-
"version": "0.1.2-beta.
|
|
3
|
+
"version": "0.1.2-beta.80",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
"types": "./dist/settings.d.ts",
|
|
16
16
|
"default": "./dist/settings.js"
|
|
17
17
|
},
|
|
18
|
+
"./threat-patterns": {
|
|
19
|
+
"types": "./dist/threat-patterns.d.ts",
|
|
20
|
+
"default": "./dist/threat-patterns.js"
|
|
21
|
+
},
|
|
18
22
|
"./package.json": {
|
|
19
23
|
"default": "./package.json"
|
|
20
24
|
}
|