@inhuman.tools/policy 0.0.0-stage → 0.1.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.
- package/authorize.scm +4 -0
- package/dist/acknowledge.d.ts +70 -0
- package/dist/acknowledge.d.ts.map +1 -0
- package/dist/acknowledge.js +162 -0
- package/dist/acknowledge.js.map +1 -0
- package/dist/authorize.d.ts +8 -0
- package/dist/authorize.d.ts.map +1 -0
- package/dist/authorize.js +39 -0
- package/dist/authorize.js.map +1 -0
- package/dist/bind.d.ts +6 -0
- package/dist/bind.d.ts.map +1 -0
- package/dist/bind.js +45 -0
- package/dist/bind.js.map +1 -0
- package/dist/check.d.ts +30 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +389 -0
- package/dist/check.js.map +1 -0
- package/dist/classes.d.ts +23 -0
- package/dist/classes.d.ts.map +1 -0
- package/dist/classes.js +139 -0
- package/dist/classes.js.map +1 -0
- package/dist/compile.d.ts +40 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +311 -0
- package/dist/compile.js.map +1 -0
- package/dist/deadline.d.ts +5 -0
- package/dist/deadline.d.ts.map +1 -0
- package/dist/deadline.js +17 -0
- package/dist/deadline.js.map +1 -0
- package/dist/decide.d.ts +64 -0
- package/dist/decide.d.ts.map +1 -0
- package/dist/decide.js +482 -0
- package/dist/decide.js.map +1 -0
- package/dist/error-with-invariant.d.ts +9 -0
- package/dist/error-with-invariant.d.ts.map +1 -0
- package/dist/error-with-invariant.js +12 -0
- package/dist/error-with-invariant.js.map +1 -0
- package/dist/floor.d.ts +9 -0
- package/dist/floor.d.ts.map +1 -0
- package/dist/floor.js +9 -0
- package/dist/floor.js.map +1 -0
- package/dist/glob-expand.d.ts +10 -0
- package/dist/glob-expand.d.ts.map +1 -0
- package/dist/glob-expand.js +132 -0
- package/dist/glob-expand.js.map +1 -0
- package/dist/guards.d.ts +26 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +419 -0
- package/dist/guards.js.map +1 -0
- package/dist/identity.d.ts +11 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +23 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/license-law.d.ts +43 -0
- package/dist/license-law.d.ts.map +1 -0
- package/dist/license-law.js +129 -0
- package/dist/license-law.js.map +1 -0
- package/dist/license.d.ts +3 -0
- package/dist/license.d.ts.map +1 -0
- package/dist/license.js +2 -0
- package/dist/license.js.map +1 -0
- package/dist/lift.d.ts +4 -0
- package/dist/lift.d.ts.map +1 -0
- package/dist/lift.js +14 -0
- package/dist/lift.js.map +1 -0
- package/dist/path-policy.d.ts +53 -0
- package/dist/path-policy.d.ts.map +1 -0
- package/dist/path-policy.js +248 -0
- package/dist/path-policy.js.map +1 -0
- package/dist/peel-cwd.d.ts +8 -0
- package/dist/peel-cwd.d.ts.map +1 -0
- package/dist/peel-cwd.js +120 -0
- package/dist/peel-cwd.js.map +1 -0
- package/dist/prep.d.ts +58 -0
- package/dist/prep.d.ts.map +1 -0
- package/dist/prep.js +690 -0
- package/dist/prep.js.map +1 -0
- package/dist/processor.d.ts +71 -0
- package/dist/processor.d.ts.map +1 -0
- package/dist/processor.js +132 -0
- package/dist/processor.js.map +1 -0
- package/dist/reasonable-defaults.d.ts +1448 -0
- package/dist/reasonable-defaults.d.ts.map +1 -0
- package/dist/reasonable-defaults.js +6 -0
- package/dist/reasonable-defaults.js.map +1 -0
- package/dist/reasonable-defaults.json +1662 -0
- package/dist/run-authorization.d.ts +8 -0
- package/dist/run-authorization.d.ts.map +1 -0
- package/dist/run-authorization.js +16 -0
- package/dist/run-authorization.js.map +1 -0
- package/dist/schemas/tirith.d.ts +58 -0
- package/dist/schemas/tirith.d.ts.map +1 -0
- package/dist/schemas/tirith.js +23 -0
- package/dist/schemas/tirith.js.map +1 -0
- package/dist/tirith-units.d.ts +2 -0
- package/dist/tirith-units.d.ts.map +1 -0
- package/dist/tirith-units.js +227 -0
- package/dist/tirith-units.js.map +1 -0
- package/dist/tirith.d.ts +24 -0
- package/dist/tirith.d.ts.map +1 -0
- package/dist/tirith.js +311 -0
- package/dist/tirith.js.map +1 -0
- package/dist/tool-path.d.ts +8 -0
- package/dist/tool-path.d.ts.map +1 -0
- package/dist/tool-path.js +38 -0
- package/dist/tool-path.js.map +1 -0
- package/dist/types.d.ts +87 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/dist/verdict.d.ts +15 -0
- package/dist/verdict.d.ts.map +1 -0
- package/dist/verdict.js +55 -0
- package/dist/verdict.js.map +1 -0
- package/package.json +62 -3
- package/src/acknowledge.ts +206 -0
- package/src/authorize.ts +38 -0
- package/src/bind.ts +58 -0
- package/src/check.ts +552 -0
- package/src/classes.ts +156 -0
- package/src/compile.ts +370 -0
- package/src/deadline.ts +15 -0
- package/src/floor.ts +16 -0
- package/src/glob-expand.ts +137 -0
- package/src/guards.ts +428 -0
- package/src/identity.ts +26 -0
- package/src/index.ts +24 -0
- package/src/lift.ts +15 -0
- package/src/path-policy.ts +280 -0
- package/src/processor.ts +187 -0
- package/src/reasonable-defaults.json +1662 -0
- package/src/reasonable-defaults.ts +8 -0
- package/src/run-authorization.ts +23 -0
- package/src/tool-path.ts +43 -0
- package/src/types.ts +102 -0
- package/src/verdict.ts +63 -0
- package/README.md +0 -3
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type EnvCapability } from "@here.build/arrival";
|
|
2
|
+
export declare function authorize(document: string, options: {
|
|
3
|
+
readonly capability: EnvCapability;
|
|
4
|
+
readonly config?: Readonly<Record<string, unknown>>;
|
|
5
|
+
readonly program?: string;
|
|
6
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
7
|
+
}): Promise<"allow" | "deny" | null>;
|
|
8
|
+
//# sourceMappingURL=run-authorization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-authorization.d.ts","sourceRoot":"","sources":["../src/run-authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAI1E,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IACP,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAClC,GACA,OAAO,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,CAUlC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { execState, toJS } from "@here.build/arrival";
|
|
2
|
+
import { authorizationSource } from "./authorize.js";
|
|
3
|
+
export async function authorize(document, options) {
|
|
4
|
+
const state = await execState(authorizationSource(options.program, options.env), {
|
|
5
|
+
capabilities: [options.capability],
|
|
6
|
+
config: { ...options.config, document },
|
|
7
|
+
});
|
|
8
|
+
const value = state.values.at(0);
|
|
9
|
+
if (value === undefined)
|
|
10
|
+
return null;
|
|
11
|
+
const decided = toJS(value);
|
|
12
|
+
if (decided === "allow" || decided === "deny")
|
|
13
|
+
return decided;
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=run-authorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-authorization.js","sourceRoot":"","sources":["../src/run-authorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAsB,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,OAKC;IAED,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE;QAC/E,YAAY,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;QAClC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE;KACxC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const findingEvidenceSchema: z.ZodObject<{
|
|
3
|
+
matched: z.ZodOptional<z.ZodString>;
|
|
4
|
+
raw: z.ZodOptional<z.ZodString>;
|
|
5
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
6
|
+
type: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
export declare const findingSchema: z.ZodObject<{
|
|
9
|
+
rule_id: z.ZodString;
|
|
10
|
+
severity: z.ZodEnum<{
|
|
11
|
+
INFO: "INFO";
|
|
12
|
+
LOW: "LOW";
|
|
13
|
+
MEDIUM: "MEDIUM";
|
|
14
|
+
HIGH: "HIGH";
|
|
15
|
+
CRITICAL: "CRITICAL";
|
|
16
|
+
}>;
|
|
17
|
+
title: z.ZodString;
|
|
18
|
+
description: z.ZodString;
|
|
19
|
+
remediation: z.ZodOptional<z.ZodString>;
|
|
20
|
+
evidence: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
21
|
+
matched: z.ZodOptional<z.ZodString>;
|
|
22
|
+
raw: z.ZodOptional<z.ZodString>;
|
|
23
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
24
|
+
type: z.ZodOptional<z.ZodString>;
|
|
25
|
+
}, z.core.$strip>>>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
export declare const outputSchema: z.ZodObject<{
|
|
28
|
+
schema_version: z.ZodLiteral<3>;
|
|
29
|
+
action: z.ZodEnum<{
|
|
30
|
+
block: "block";
|
|
31
|
+
allow: "allow";
|
|
32
|
+
warn: "warn";
|
|
33
|
+
}>;
|
|
34
|
+
findings: z.ZodArray<z.ZodObject<{
|
|
35
|
+
rule_id: z.ZodString;
|
|
36
|
+
severity: z.ZodEnum<{
|
|
37
|
+
INFO: "INFO";
|
|
38
|
+
LOW: "LOW";
|
|
39
|
+
MEDIUM: "MEDIUM";
|
|
40
|
+
HIGH: "HIGH";
|
|
41
|
+
CRITICAL: "CRITICAL";
|
|
42
|
+
}>;
|
|
43
|
+
title: z.ZodString;
|
|
44
|
+
description: z.ZodString;
|
|
45
|
+
remediation: z.ZodOptional<z.ZodString>;
|
|
46
|
+
evidence: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
47
|
+
matched: z.ZodOptional<z.ZodString>;
|
|
48
|
+
raw: z.ZodOptional<z.ZodString>;
|
|
49
|
+
pattern: z.ZodOptional<z.ZodString>;
|
|
50
|
+
type: z.ZodOptional<z.ZodString>;
|
|
51
|
+
}, z.core.$strip>>>;
|
|
52
|
+
}, z.core.$strip>>;
|
|
53
|
+
bypass_honored: z.ZodLiteral<false>;
|
|
54
|
+
policy_path_used: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
export type TirithFinding = z.infer<typeof findingSchema>;
|
|
57
|
+
export type TirithOutput = z.infer<typeof outputSchema>;
|
|
58
|
+
//# sourceMappingURL=tirith.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tirith.d.ts","sourceRoot":"","sources":["../../src/schemas/tirith.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;iBAKhC,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;iBAOxB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMvB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const findingEvidenceSchema = z.object({
|
|
3
|
+
matched: z.string().optional(),
|
|
4
|
+
raw: z.string().optional(),
|
|
5
|
+
pattern: z.string().optional(),
|
|
6
|
+
type: z.string().optional(),
|
|
7
|
+
});
|
|
8
|
+
export const findingSchema = z.object({
|
|
9
|
+
rule_id: z.string(),
|
|
10
|
+
severity: z.enum(["INFO", "LOW", "MEDIUM", "HIGH", "CRITICAL"]),
|
|
11
|
+
title: z.string(),
|
|
12
|
+
description: z.string(),
|
|
13
|
+
remediation: z.string().optional(),
|
|
14
|
+
evidence: z.array(findingEvidenceSchema).optional(),
|
|
15
|
+
});
|
|
16
|
+
export const outputSchema = z.object({
|
|
17
|
+
schema_version: z.literal(3),
|
|
18
|
+
action: z.enum(["allow", "warn", "block"]),
|
|
19
|
+
findings: z.array(findingSchema),
|
|
20
|
+
bypass_honored: z.literal(false),
|
|
21
|
+
policy_path_used: z.string().nullable().optional(),
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=tirith.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tirith.js","sourceRoot":"","sources":["../../src/schemas/tirith.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;IAChC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tirith-units.d.ts","sourceRoot":"","sources":["../src/tirith-units.ts"],"names":[],"mappings":"AA8BA,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAQ7D"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Statement units for Tirith. Unbash AST, not regex. A pipeline of
|
|
3
|
+
* `grep 'fn()' file | head` is two commands; Tirith's nested-body
|
|
4
|
+
* analyzer treats the `|` as "the RHS might execute the LHS" and
|
|
5
|
+
* fail-closes. Dropping a proven-pure tail and checking each
|
|
6
|
+
* statement separately is the host's claim, not Tirith's.
|
|
7
|
+
*
|
|
8
|
+
* Do not peel when a function, `source`/`.`/`eval`/`alias`, or a
|
|
9
|
+
* PATH/ENV assignment is in the script: those rebind the tail name
|
|
10
|
+
* for later stages. Parse failure keeps the original line.
|
|
11
|
+
*/
|
|
12
|
+
import { parse } from "unbash";
|
|
13
|
+
const SAFE_TAILS = new Set([
|
|
14
|
+
"head",
|
|
15
|
+
"tail",
|
|
16
|
+
"wc",
|
|
17
|
+
"uniq",
|
|
18
|
+
"sort",
|
|
19
|
+
"cut",
|
|
20
|
+
"tr",
|
|
21
|
+
"cat",
|
|
22
|
+
"true",
|
|
23
|
+
"false",
|
|
24
|
+
]);
|
|
25
|
+
const SEAL_NAMES = new Set(["source", ".", "eval", "alias"]);
|
|
26
|
+
const IDENTITY_VARS = new Set(["PATH", "ENV", "BASH_ENV"]);
|
|
27
|
+
const PARTLESS_FORBIDDEN = /[*?[\\$`]/;
|
|
28
|
+
export function tirithUnits(source) {
|
|
29
|
+
const script = parse(source);
|
|
30
|
+
if (script.errors !== undefined && script.errors.length > 0)
|
|
31
|
+
return [source];
|
|
32
|
+
if (script.commands.some(sealsNode))
|
|
33
|
+
return [source];
|
|
34
|
+
if (!script.commands.some(hasMultiStagePipe))
|
|
35
|
+
return [source];
|
|
36
|
+
const units = [];
|
|
37
|
+
for (const statement of script.commands)
|
|
38
|
+
collectStatement(statement, source, units);
|
|
39
|
+
return units.length === 0 ? [source] : units;
|
|
40
|
+
}
|
|
41
|
+
function collectStatement(statement, source, units) {
|
|
42
|
+
if (statement.redirects.length > 0) {
|
|
43
|
+
units.push(source.slice(statement.command.pos, statement.command.end));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
collectNode(statement.command, source, units);
|
|
47
|
+
}
|
|
48
|
+
function collectNode(node, source, units) {
|
|
49
|
+
switch (node.type) {
|
|
50
|
+
case "Statement":
|
|
51
|
+
collectStatement(node, source, units);
|
|
52
|
+
return;
|
|
53
|
+
case "CompoundList":
|
|
54
|
+
for (const statement of node.commands)
|
|
55
|
+
collectStatement(statement, source, units);
|
|
56
|
+
return;
|
|
57
|
+
case "Pipeline":
|
|
58
|
+
units.push(peelPipeline(node, source));
|
|
59
|
+
return;
|
|
60
|
+
case "AndOr":
|
|
61
|
+
for (const child of node.commands)
|
|
62
|
+
collectNode(child, source, units);
|
|
63
|
+
return;
|
|
64
|
+
case "Subshell":
|
|
65
|
+
case "BraceGroup":
|
|
66
|
+
collectNode(node.body, source, units);
|
|
67
|
+
return;
|
|
68
|
+
case "If":
|
|
69
|
+
collectNode(node.clause, source, units);
|
|
70
|
+
collectNode(node.then, source, units);
|
|
71
|
+
if (node.else !== undefined)
|
|
72
|
+
collectNode(node.else, source, units);
|
|
73
|
+
return;
|
|
74
|
+
case "For":
|
|
75
|
+
case "Select":
|
|
76
|
+
collectNode(node.body, source, units);
|
|
77
|
+
return;
|
|
78
|
+
case "ArithmeticFor":
|
|
79
|
+
case "While":
|
|
80
|
+
collectNode(node.body, source, units);
|
|
81
|
+
return;
|
|
82
|
+
case "Case":
|
|
83
|
+
for (const item of node.items)
|
|
84
|
+
collectNode(item.body, source, units);
|
|
85
|
+
return;
|
|
86
|
+
case "Command":
|
|
87
|
+
case "TestCommand":
|
|
88
|
+
case "ArithmeticCommand":
|
|
89
|
+
units.push(source.slice(node.pos, node.end));
|
|
90
|
+
return;
|
|
91
|
+
case "Function":
|
|
92
|
+
case "Coproc":
|
|
93
|
+
units.push(source.slice(node.pos, node.end));
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function peelPipeline(node, source) {
|
|
98
|
+
let keep = node.commands.length;
|
|
99
|
+
while (keep > 1 && node.operators[keep - 2] === "|" && isSafeTail(node.commands[keep - 1])) {
|
|
100
|
+
keep -= 1;
|
|
101
|
+
}
|
|
102
|
+
if (keep === node.commands.length)
|
|
103
|
+
return source.slice(node.pos, node.end);
|
|
104
|
+
return source.slice(node.pos, node.commands[keep - 1].end);
|
|
105
|
+
}
|
|
106
|
+
function isSafeTail(node) {
|
|
107
|
+
if (node.type === "Pipeline" && node.commands.length === 1 && node.negated !== true && node.time !== true) {
|
|
108
|
+
return isSafeTail(node.commands[0]);
|
|
109
|
+
}
|
|
110
|
+
if (node.type !== "Command")
|
|
111
|
+
return false;
|
|
112
|
+
if (node.redirects.length > 0 || node.prefix.length > 0 || node.name === undefined)
|
|
113
|
+
return false;
|
|
114
|
+
if (!isLiteralWord(node.name) || node.name.value.includes("/"))
|
|
115
|
+
return false;
|
|
116
|
+
const argv0 = node.name.value;
|
|
117
|
+
if (!SAFE_TAILS.has(argv0))
|
|
118
|
+
return false;
|
|
119
|
+
return argv0 !== "sort" || !sortWrites(node);
|
|
120
|
+
}
|
|
121
|
+
function sortWrites(command) {
|
|
122
|
+
for (const word of command.suffix) {
|
|
123
|
+
if (!isLiteralWord(word))
|
|
124
|
+
return true;
|
|
125
|
+
const value = word.value;
|
|
126
|
+
if (value.startsWith("-o") || value === "--output" || value.startsWith("--output="))
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
function hasMultiStagePipe(node) {
|
|
132
|
+
switch (node.type) {
|
|
133
|
+
case "Pipeline":
|
|
134
|
+
return node.commands.length > 1 || node.commands.some(hasMultiStagePipe);
|
|
135
|
+
case "Statement":
|
|
136
|
+
return hasMultiStagePipe(node.command);
|
|
137
|
+
case "CompoundList":
|
|
138
|
+
return node.commands.some(hasMultiStagePipe);
|
|
139
|
+
case "AndOr":
|
|
140
|
+
return node.commands.some(hasMultiStagePipe);
|
|
141
|
+
case "Subshell":
|
|
142
|
+
case "BraceGroup":
|
|
143
|
+
return hasMultiStagePipe(node.body);
|
|
144
|
+
case "If":
|
|
145
|
+
return (hasMultiStagePipe(node.clause) ||
|
|
146
|
+
hasMultiStagePipe(node.then) ||
|
|
147
|
+
(node.else !== undefined && hasMultiStagePipe(node.else)));
|
|
148
|
+
case "For":
|
|
149
|
+
case "Select":
|
|
150
|
+
case "While":
|
|
151
|
+
case "ArithmeticFor":
|
|
152
|
+
return hasMultiStagePipe(node.body);
|
|
153
|
+
case "Case":
|
|
154
|
+
return node.items.some((item) => hasMultiStagePipe(item.body));
|
|
155
|
+
case "Function":
|
|
156
|
+
case "Coproc":
|
|
157
|
+
case "Command":
|
|
158
|
+
case "TestCommand":
|
|
159
|
+
case "ArithmeticCommand":
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function sealsNode(node) {
|
|
164
|
+
switch (node.type) {
|
|
165
|
+
case "Function":
|
|
166
|
+
case "Coproc":
|
|
167
|
+
return true;
|
|
168
|
+
case "Statement":
|
|
169
|
+
return sealsNode(node.command);
|
|
170
|
+
case "CompoundList":
|
|
171
|
+
return node.commands.some(sealsNode);
|
|
172
|
+
case "Pipeline":
|
|
173
|
+
case "AndOr":
|
|
174
|
+
return node.commands.some(sealsNode);
|
|
175
|
+
case "Subshell":
|
|
176
|
+
case "BraceGroup":
|
|
177
|
+
return sealsNode(node.body);
|
|
178
|
+
case "If":
|
|
179
|
+
return sealsNode(node.clause) || sealsNode(node.then) || (node.else !== undefined && sealsNode(node.else));
|
|
180
|
+
case "For":
|
|
181
|
+
case "Select":
|
|
182
|
+
case "While":
|
|
183
|
+
case "ArithmeticFor":
|
|
184
|
+
return sealsNode(node.body);
|
|
185
|
+
case "Case":
|
|
186
|
+
return node.items.some((item) => sealsNode(item.body));
|
|
187
|
+
case "Command":
|
|
188
|
+
return commandSeals(node);
|
|
189
|
+
case "TestCommand":
|
|
190
|
+
case "ArithmeticCommand":
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function commandSeals(command) {
|
|
195
|
+
if (command.prefix.some((prefix) => prefix.name !== undefined && IDENTITY_VARS.has(prefix.name)))
|
|
196
|
+
return true;
|
|
197
|
+
if (command.name === undefined || !isLiteralWord(command.name))
|
|
198
|
+
return false;
|
|
199
|
+
if (SEAL_NAMES.has(command.name.value))
|
|
200
|
+
return true;
|
|
201
|
+
if (command.name.value !== "export")
|
|
202
|
+
return false;
|
|
203
|
+
return command.suffix.some((word) => {
|
|
204
|
+
const eq = word.value.indexOf("=");
|
|
205
|
+
return eq > 0 && IDENTITY_VARS.has(word.value.slice(0, eq));
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
function isLiteralWord(word) {
|
|
209
|
+
if (word.parts === undefined) {
|
|
210
|
+
return !PARTLESS_FORBIDDEN.test(word.text) && !word.text.startsWith("~");
|
|
211
|
+
}
|
|
212
|
+
return word.parts.every(partIsLiteral);
|
|
213
|
+
}
|
|
214
|
+
function partIsLiteral(part) {
|
|
215
|
+
switch (part.type) {
|
|
216
|
+
case "Literal":
|
|
217
|
+
case "SingleQuoted":
|
|
218
|
+
return true;
|
|
219
|
+
case "AnsiCQuoted":
|
|
220
|
+
return !part.value.includes("\0");
|
|
221
|
+
case "DoubleQuoted":
|
|
222
|
+
return part.parts.every((child) => child.type === "Literal");
|
|
223
|
+
default:
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=tirith-units.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tirith-units.js","sourceRoot":"","sources":["../src/tirith-units.ts"],"names":[],"mappings":"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"}
|
package/dist/tirith.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type TirithFinding, type TirithOutput } from "./schemas/tirith.js";
|
|
2
|
+
import type { Disposition } from "./types.js";
|
|
3
|
+
export type TirithReport = {
|
|
4
|
+
readonly action: "allow" | "warn" | "block" | "error";
|
|
5
|
+
readonly findings: readonly TirithFinding[];
|
|
6
|
+
readonly error?: string;
|
|
7
|
+
};
|
|
8
|
+
export type ShellCheckOptions = {
|
|
9
|
+
readonly cwd: string;
|
|
10
|
+
readonly signal?: AbortSignal;
|
|
11
|
+
};
|
|
12
|
+
export type ShellChecker = (command: string, options: ShellCheckOptions) => Promise<TirithReport>;
|
|
13
|
+
export declare function parseTirithOutput(stdout: string, code: number | null): TirithOutput;
|
|
14
|
+
export declare function tirithFailure(error: unknown): TirithReport;
|
|
15
|
+
export type TirithCoverage = "error" | "concrete" | "incomplete" | "intel-gap" | "none";
|
|
16
|
+
export declare function tirithCoverage(report: TirithReport): TirithCoverage;
|
|
17
|
+
export declare function tirithDisposition(report: TirithReport): Disposition;
|
|
18
|
+
/** Model-facing. Scanner identity stays in `policyEvidenceJson`. */
|
|
19
|
+
export declare function tirithMessage(report: TirithReport): string | null;
|
|
20
|
+
/** Classifier PIP. Concrete findings only — no-verdicts are not threats. */
|
|
21
|
+
export declare function tirithPolicyCut(report: TirithReport): string;
|
|
22
|
+
export declare function parseTirithEvidence(json: string | null | undefined): TirithReport | null;
|
|
23
|
+
export declare const checkTirith: ShellChecker;
|
|
24
|
+
//# sourceMappingURL=tirith.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tirith.d.ts","sourceRoot":"","sources":["../src/tirith.ts"],"names":[],"mappings":"AAaA,OAAO,EAA+B,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AACxF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAMlG,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CAInF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAE1D;AASD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC;AAExF,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAMnE;AA4CD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW,CAcnE;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAejE;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAG5D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,CASxF;AAuJD,eAAO,MAAM,WAAW,EAAE,YA8BzB,CAAC"}
|