@sikkuumiii/defuse 0.0.0-stage → 0.5.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/LICENSE +235 -0
- package/README.md +561 -2
- package/dist/src/cli.d.ts +20 -0
- package/dist/src/cli.js +619 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/core/analyze.d.ts +178 -0
- package/dist/src/core/analyze.js +834 -0
- package/dist/src/core/analyze.js.map +1 -0
- package/dist/src/core/coverage.d.ts +87 -0
- package/dist/src/core/coverage.js +181 -0
- package/dist/src/core/coverage.js.map +1 -0
- package/dist/src/core/finding.d.ts +196 -0
- package/dist/src/core/finding.js +178 -0
- package/dist/src/core/finding.js.map +1 -0
- package/dist/src/core/licence.d.ts +50 -0
- package/dist/src/core/licence.js +56 -0
- package/dist/src/core/licence.js.map +1 -0
- package/dist/src/core/paths.d.ts +21 -0
- package/dist/src/core/paths.js +58 -0
- package/dist/src/core/paths.js.map +1 -0
- package/dist/src/core/score.d.ts +137 -0
- package/dist/src/core/score.js +232 -0
- package/dist/src/core/score.js.map +1 -0
- package/dist/src/dast/targets.d.ts +30 -0
- package/dist/src/dast/targets.js +79 -0
- package/dist/src/dast/targets.js.map +1 -0
- package/dist/src/dast/zap.d.ts +42 -0
- package/dist/src/dast/zap.js +184 -0
- package/dist/src/dast/zap.js.map +1 -0
- package/dist/src/engine/scan.d.ts +80 -0
- package/dist/src/engine/scan.js +129 -0
- package/dist/src/engine/scan.js.map +1 -0
- package/dist/src/engine/shapes.d.ts +47 -0
- package/dist/src/engine/shapes.js +328 -0
- package/dist/src/engine/shapes.js.map +1 -0
- package/dist/src/engine/walk.d.ts +60 -0
- package/dist/src/engine/walk.js +156 -0
- package/dist/src/engine/walk.js.map +1 -0
- package/dist/src/parse/astDump.d.ts +31 -0
- package/dist/src/parse/astDump.js +66 -0
- package/dist/src/parse/astDump.js.map +1 -0
- package/dist/src/parse/languages.d.ts +70 -0
- package/dist/src/parse/languages.js +174 -0
- package/dist/src/parse/languages.js.map +1 -0
- package/dist/src/parse/location.d.ts +17 -0
- package/dist/src/parse/location.js +38 -0
- package/dist/src/parse/location.js.map +1 -0
- package/dist/src/parse/node-grammars.d.ts +12 -0
- package/dist/src/parse/node-grammars.js +35 -0
- package/dist/src/parse/node-grammars.js.map +1 -0
- package/dist/src/parse/parser.d.ts +126 -0
- package/dist/src/parse/parser.js +202 -0
- package/dist/src/parse/parser.js.map +1 -0
- package/dist/src/parse/tree-store.d.ts +139 -0
- package/dist/src/parse/tree-store.js +236 -0
- package/dist/src/parse/tree-store.js.map +1 -0
- package/dist/src/platform/dependency-rule.d.ts +27 -0
- package/dist/src/platform/dependency-rule.js +21 -0
- package/dist/src/platform/dependency-rule.js.map +1 -0
- package/dist/src/platform/deps.d.ts +86 -0
- package/dist/src/platform/deps.js +304 -0
- package/dist/src/platform/deps.js.map +1 -0
- package/dist/src/platform/php-facts.d.ts +49 -0
- package/dist/src/platform/php-facts.js +67 -0
- package/dist/src/platform/php-facts.js.map +1 -0
- package/dist/src/platform/runtime-version.d.ts +78 -0
- package/dist/src/platform/runtime-version.js +573 -0
- package/dist/src/platform/runtime-version.js.map +1 -0
- package/dist/src/report/colors.d.ts +50 -0
- package/dist/src/report/colors.js +97 -0
- package/dist/src/report/colors.js.map +1 -0
- package/dist/src/report/coverage-table.d.ts +90 -0
- package/dist/src/report/coverage-table.js +291 -0
- package/dist/src/report/coverage-table.js.map +1 -0
- package/dist/src/report/html-report.d.ts +66 -0
- package/dist/src/report/html-report.js +489 -0
- package/dist/src/report/html-report.js.map +1 -0
- package/dist/src/report/human.d.ts +44 -0
- package/dist/src/report/human.js +575 -0
- package/dist/src/report/human.js.map +1 -0
- package/dist/src/report/json.d.ts +24 -0
- package/dist/src/report/json.js +178 -0
- package/dist/src/report/json.js.map +1 -0
- package/dist/src/report/mark.d.ts +17 -0
- package/dist/src/report/mark.js +39 -0
- package/dist/src/report/mark.js.map +1 -0
- package/dist/src/report/pricing.d.ts +33 -0
- package/dist/src/report/pricing.js +343 -0
- package/dist/src/report/pricing.js.map +1 -0
- package/dist/src/report/sarif.d.ts +39 -0
- package/dist/src/report/sarif.js +219 -0
- package/dist/src/report/sarif.js.map +1 -0
- package/dist/src/report/site.d.ts +87 -0
- package/dist/src/report/site.js +742 -0
- package/dist/src/report/site.js.map +1 -0
- package/dist/src/rules/code-injection.d.ts +47 -0
- package/dist/src/rules/code-injection.js +326 -0
- package/dist/src/rules/code-injection.js.map +1 -0
- package/dist/src/rules/command-injection.d.ts +30 -0
- package/dist/src/rules/command-injection.js +286 -0
- package/dist/src/rules/command-injection.js.map +1 -0
- package/dist/src/rules/contract.d.ts +198 -0
- package/dist/src/rules/contract.js +39 -0
- package/dist/src/rules/contract.js.map +1 -0
- package/dist/src/rules/format-string.d.ts +46 -0
- package/dist/src/rules/format-string.js +146 -0
- package/dist/src/rules/format-string.js.map +1 -0
- package/dist/src/rules/hardcoded-secret.d.ts +38 -0
- package/dist/src/rules/hardcoded-secret.js +440 -0
- package/dist/src/rules/hardcoded-secret.js.map +1 -0
- package/dist/src/rules/lib/guards.d.ts +168 -0
- package/dist/src/rules/lib/guards.js +1179 -0
- package/dist/src/rules/lib/guards.js.map +1 -0
- package/dist/src/rules/lib/html-safety.d.ts +75 -0
- package/dist/src/rules/lib/html-safety.js +755 -0
- package/dist/src/rules/lib/html-safety.js.map +1 -0
- package/dist/src/rules/lib/local-build.d.ts +59 -0
- package/dist/src/rules/lib/local-build.js +320 -0
- package/dist/src/rules/lib/local-build.js.map +1 -0
- package/dist/src/rules/lib/strings.d.ts +208 -0
- package/dist/src/rules/lib/strings.js +1970 -0
- package/dist/src/rules/lib/strings.js.map +1 -0
- package/dist/src/rules/path-traversal.d.ts +33 -0
- package/dist/src/rules/path-traversal.js +96 -0
- package/dist/src/rules/path-traversal.js.map +1 -0
- package/dist/src/rules/registry.d.ts +19 -0
- package/dist/src/rules/registry.js +77 -0
- package/dist/src/rules/registry.js.map +1 -0
- package/dist/src/rules/sql-injection.d.ts +36 -0
- package/dist/src/rules/sql-injection.js +299 -0
- package/dist/src/rules/sql-injection.js.map +1 -0
- package/dist/src/rules/ssrf.d.ts +39 -0
- package/dist/src/rules/ssrf.js +111 -0
- package/dist/src/rules/ssrf.js.map +1 -0
- package/dist/src/rules/unbounded-copy.d.ts +37 -0
- package/dist/src/rules/unbounded-copy.js +147 -0
- package/dist/src/rules/unbounded-copy.js.map +1 -0
- package/dist/src/rules/unsafe-deserialization.d.ts +43 -0
- package/dist/src/rules/unsafe-deserialization.js +276 -0
- package/dist/src/rules/unsafe-deserialization.js.map +1 -0
- package/dist/src/rules/weak-hash.d.ts +37 -0
- package/dist/src/rules/weak-hash.js +197 -0
- package/dist/src/rules/weak-hash.js.map +1 -0
- package/dist/src/rules/xss.d.ts +38 -0
- package/dist/src/rules/xss.js +527 -0
- package/dist/src/rules/xss.js.map +1 -0
- package/dist/src/taint/content-type.d.ts +19 -0
- package/dist/src/taint/content-type.js +20 -0
- package/dist/src/taint/content-type.js.map +1 -0
- package/dist/src/taint/dictionaries.d.ts +23 -0
- package/dist/src/taint/dictionaries.js +1778 -0
- package/dist/src/taint/dictionaries.js.map +1 -0
- package/dist/src/taint/fold.d.ts +59 -0
- package/dist/src/taint/fold.js +1177 -0
- package/dist/src/taint/fold.js.map +1 -0
- package/dist/src/taint/java-scope.d.ts +61 -0
- package/dist/src/taint/java-scope.js +212 -0
- package/dist/src/taint/java-scope.js.map +1 -0
- package/dist/src/taint/local-map.d.ts +79 -0
- package/dist/src/taint/local-map.js +603 -0
- package/dist/src/taint/local-map.js.map +1 -0
- package/dist/src/taint/project.d.ts +172 -0
- package/dist/src/taint/project.js +617 -0
- package/dist/src/taint/project.js.map +1 -0
- package/dist/src/taint/tracer.d.ts +265 -0
- package/dist/src/taint/tracer.js +3817 -0
- package/dist/src/taint/tracer.js.map +1 -0
- package/dist/src/taint/types.d.ts +484 -0
- package/dist/src/taint/types.js +47 -0
- package/dist/src/taint/types.js.map +1 -0
- package/dist/src/taint/visibility.d.ts +25 -0
- package/dist/src/taint/visibility.js +96 -0
- package/dist/src/taint/visibility.js.map +1 -0
- package/docs/examples/defuse.json +20 -0
- package/docs/examples/dvwa-urls.json +14 -0
- package/docs/examples/github-code-scanning.yml +54 -0
- package/docs/examples/tiny.js +4 -0
- package/package.json +73 -4
- package/src/cli.ts +747 -0
- package/src/core/analyze.ts +1072 -0
- package/src/core/coverage.ts +269 -0
- package/src/core/finding.ts +311 -0
- package/src/core/licence.ts +61 -0
- package/src/core/paths.ts +59 -0
- package/src/core/score.ts +353 -0
- package/src/dast/targets.ts +121 -0
- package/src/dast/zap.ts +246 -0
- package/src/engine/scan.ts +200 -0
- package/src/engine/shapes.ts +348 -0
- package/src/engine/walk.ts +196 -0
- package/src/parse/astDump.ts +85 -0
- package/src/parse/languages.ts +232 -0
- package/src/parse/location.ts +44 -0
- package/src/parse/node-grammars.ts +41 -0
- package/src/parse/parser.ts +262 -0
- package/src/parse/tree-store.ts +301 -0
- package/src/platform/dependency-rule.ts +33 -0
- package/src/platform/deps.ts +374 -0
- package/src/platform/php-facts.ts +85 -0
- package/src/platform/runtime-version.ts +710 -0
- package/src/report/colors.ts +107 -0
- package/src/report/coverage-table.ts +359 -0
- package/src/report/html-report.ts +601 -0
- package/src/report/human.ts +811 -0
- package/src/report/json.ts +189 -0
- package/src/report/mark.ts +47 -0
- package/src/report/pricing.ts +374 -0
- package/src/report/sarif.ts +235 -0
- package/src/report/site.ts +760 -0
- package/src/rules/code-injection.ts +346 -0
- package/src/rules/command-injection.ts +296 -0
- package/src/rules/contract.ts +220 -0
- package/src/rules/format-string.ts +158 -0
- package/src/rules/hardcoded-secret.ts +485 -0
- package/src/rules/lib/guards.ts +1235 -0
- package/src/rules/lib/html-safety.ts +793 -0
- package/src/rules/lib/local-build.ts +329 -0
- package/src/rules/lib/strings.ts +2034 -0
- package/src/rules/path-traversal.ts +101 -0
- package/src/rules/registry.ts +90 -0
- package/src/rules/sql-injection.ts +311 -0
- package/src/rules/ssrf.ts +118 -0
- package/src/rules/unbounded-copy.ts +162 -0
- package/src/rules/unsafe-deserialization.ts +291 -0
- package/src/rules/weak-hash.ts +226 -0
- package/src/rules/xss.ts +572 -0
- package/src/taint/content-type.ts +20 -0
- package/src/taint/dictionaries.ts +1855 -0
- package/src/taint/fold.ts +1206 -0
- package/src/taint/java-scope.ts +200 -0
- package/src/taint/local-map.ts +594 -0
- package/src/taint/project.ts +774 -0
- package/src/taint/tracer.ts +4298 -0
- package/src/taint/types.ts +511 -0
- package/src/taint/visibility.ts +100 -0
- package/tsconfig.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fold.js","sourceRoot":"","sources":["../../../src/taint/fold.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JAVA NAMES, AS JAVA RESOLVES THEM - THE PARTS THE CONSTANT PROOF NEEDS.
|
|
3
|
+
* =====================================================================
|
|
4
|
+
*
|
|
5
|
+
* The constant proof (rules/lib/strings.ts) withdraws a finding when it can
|
|
6
|
+
* show every value spliced into a query or command is fixed. That makes every
|
|
7
|
+
* mistake about WHICH declaration a name refers to a deleted finding, not a
|
|
8
|
+
* noisy one. An agent was set to break it, and in Java alone it found 32 ways
|
|
9
|
+
* (tests/probes/): a class hidden by a pattern variable, a static import, an
|
|
10
|
+
* enum constant or an inherited member type; an inherited overload; a local
|
|
11
|
+
* that is out of scope where the value is read; `final` written only in a
|
|
12
|
+
* comment; a `\u000a` that javac reads as a newline.
|
|
13
|
+
*
|
|
14
|
+
* This module does not resolve names. It answers narrower questions whose
|
|
15
|
+
* "no" is always safe - "is this name used ANY way but as a qualifier?", "does
|
|
16
|
+
* any class between here and there inherit from something?" - so a doubt ends
|
|
17
|
+
* the proof and leaves the finding standing.
|
|
18
|
+
*/
|
|
19
|
+
import type { Node } from 'web-tree-sitter';
|
|
20
|
+
/** A modifier keyword on a declaration - the token itself, never a word in an annotation or comment. */
|
|
21
|
+
export declare function hasModifier(declaration: Node, keyword: string): boolean;
|
|
22
|
+
/** A class-like node, including `new T() { ... }` - an anonymous subclass of T. */
|
|
23
|
+
export declare function isClassLike(n: Node): boolean;
|
|
24
|
+
/** Class-like nodes strictly enclosing `n`, innermost first, stopping before `stop` if given. */
|
|
25
|
+
export declare function enclosingClassLikes(n: Node, stop?: Node): Node[];
|
|
26
|
+
/**
|
|
27
|
+
* The types a class-like inherits from, as written: `extends B`, `implements
|
|
28
|
+
* I, J`, an interface's `extends`, and the T of an anonymous `new T() {}`.
|
|
29
|
+
* Generic arguments are dropped; a qualified name keeps its dots.
|
|
30
|
+
*/
|
|
31
|
+
export declare function supertypesOf(classLike: Node): string[];
|
|
32
|
+
/**
|
|
33
|
+
* Is every appearance of `name` in this file - outside its package and import
|
|
34
|
+
* lines - a QUALIFIER, as `name` is in `name.m()`, `name.f` or `@name.A`?
|
|
35
|
+
*
|
|
36
|
+
* A variable, parameter, field, pattern variable, lambda parameter, enum
|
|
37
|
+
* constant, label or type DECLARED with that name is some other kind of
|
|
38
|
+
* appearance, and any one of them could be what `name.m()` means here (JLS
|
|
39
|
+
* 6.4.2: a variable obscures a type, and a type a package). Reading the
|
|
40
|
+
* negative is what keeps this short: there are a dozen ways to declare a name
|
|
41
|
+
* in Java and only these few ways to use one as a qualifier.
|
|
42
|
+
*/
|
|
43
|
+
export declare function usedOnlyAsQualifier(root: Node, name: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Does the file bind `name` in a way the constant proof's write survey does
|
|
46
|
+
* not collect - a lambda parameter, a pattern variable (`instanceof T name`,
|
|
47
|
+
* `case T name ->`, a record pattern), a try-with-resources variable, a
|
|
48
|
+
* record component, or an enum constant? Any one of them can shadow the
|
|
49
|
+
* declaration the proof found (tests/probes/p15, p16, j01, j02).
|
|
50
|
+
*/
|
|
51
|
+
export declare function boundElsewhere(root: Node, name: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Where a Java declaration of a variable is visible: a local from its own
|
|
54
|
+
* declaration to the end of the block that holds it (a `for` header's local,
|
|
55
|
+
* the whole `for`); a field or interface constant, its whole class body.
|
|
56
|
+
* Null for anything else - the caller treats that as "cannot place it".
|
|
57
|
+
*/
|
|
58
|
+
export declare function declarationScope(declarator: Node): {
|
|
59
|
+
region: Node;
|
|
60
|
+
from: number;
|
|
61
|
+
} | null;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JAVA NAMES, AS JAVA RESOLVES THEM - THE PARTS THE CONSTANT PROOF NEEDS.
|
|
3
|
+
* =====================================================================
|
|
4
|
+
*
|
|
5
|
+
* The constant proof (rules/lib/strings.ts) withdraws a finding when it can
|
|
6
|
+
* show every value spliced into a query or command is fixed. That makes every
|
|
7
|
+
* mistake about WHICH declaration a name refers to a deleted finding, not a
|
|
8
|
+
* noisy one. An agent was set to break it, and in Java alone it found 32 ways
|
|
9
|
+
* (tests/probes/): a class hidden by a pattern variable, a static import, an
|
|
10
|
+
* enum constant or an inherited member type; an inherited overload; a local
|
|
11
|
+
* that is out of scope where the value is read; `final` written only in a
|
|
12
|
+
* comment; a `\u000a` that javac reads as a newline.
|
|
13
|
+
*
|
|
14
|
+
* This module does not resolve names. It answers narrower questions whose
|
|
15
|
+
* "no" is always safe - "is this name used ANY way but as a qualifier?", "does
|
|
16
|
+
* any class between here and there inherit from something?" - so a doubt ends
|
|
17
|
+
* the proof and leaves the finding standing.
|
|
18
|
+
*/
|
|
19
|
+
/** A modifier keyword on a declaration - the token itself, never a word in an annotation or comment. */
|
|
20
|
+
export function hasModifier(declaration, keyword) {
|
|
21
|
+
const modifiers = declaration.namedChildren.find((c) => c?.type === 'modifiers');
|
|
22
|
+
return !!modifiers && modifiers.children.some((c) => c?.type === keyword);
|
|
23
|
+
}
|
|
24
|
+
/** Declarations whose body is a class body: they can declare and inherit members. */
|
|
25
|
+
const CLASS_LIKE = new Set([
|
|
26
|
+
'class_declaration', 'interface_declaration', 'enum_declaration', 'record_declaration',
|
|
27
|
+
'annotation_type_declaration',
|
|
28
|
+
]);
|
|
29
|
+
/** A class-like node, including `new T() { ... }` - an anonymous subclass of T. */
|
|
30
|
+
export function isClassLike(n) {
|
|
31
|
+
return (CLASS_LIKE.has(n.type) ||
|
|
32
|
+
(n.type === 'object_creation_expression' && n.namedChildren.some((c) => c?.type === 'class_body')));
|
|
33
|
+
}
|
|
34
|
+
/** Class-like nodes strictly enclosing `n`, innermost first, stopping before `stop` if given. */
|
|
35
|
+
export function enclosingClassLikes(n, stop) {
|
|
36
|
+
const out = [];
|
|
37
|
+
for (let at = n.parent; at; at = at.parent) {
|
|
38
|
+
if (stop && at.startIndex === stop.startIndex && at.endIndex === stop.endIndex)
|
|
39
|
+
break;
|
|
40
|
+
if (isClassLike(at))
|
|
41
|
+
out.push(at);
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The types a class-like inherits from, as written: `extends B`, `implements
|
|
47
|
+
* I, J`, an interface's `extends`, and the T of an anonymous `new T() {}`.
|
|
48
|
+
* Generic arguments are dropped; a qualified name keeps its dots.
|
|
49
|
+
*/
|
|
50
|
+
export function supertypesOf(classLike) {
|
|
51
|
+
const names = [];
|
|
52
|
+
const add = (t) => {
|
|
53
|
+
if (!t)
|
|
54
|
+
return;
|
|
55
|
+
const text = (t.text ?? '').replace(/<[\s\S]*$/, '').replace(/\s+/g, '');
|
|
56
|
+
if (text)
|
|
57
|
+
names.push(text);
|
|
58
|
+
};
|
|
59
|
+
if (classLike.type === 'object_creation_expression') {
|
|
60
|
+
add(classLike.childForFieldName('type'));
|
|
61
|
+
return names;
|
|
62
|
+
}
|
|
63
|
+
for (const child of classLike.namedChildren) {
|
|
64
|
+
if (!child)
|
|
65
|
+
continue;
|
|
66
|
+
if (child.type === 'superclass' || child.type === 'super_interfaces' || child.type === 'extends_interfaces') {
|
|
67
|
+
const visit = (n) => {
|
|
68
|
+
if (n.type === 'type_identifier' || n.type === 'scoped_type_identifier' || n.type === 'generic_type') {
|
|
69
|
+
add(n);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
for (const c of n.namedChildren)
|
|
73
|
+
if (c)
|
|
74
|
+
visit(c);
|
|
75
|
+
};
|
|
76
|
+
visit(child);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return names;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Is every appearance of `name` in this file - outside its package and import
|
|
83
|
+
* lines - a QUALIFIER, as `name` is in `name.m()`, `name.f` or `@name.A`?
|
|
84
|
+
*
|
|
85
|
+
* A variable, parameter, field, pattern variable, lambda parameter, enum
|
|
86
|
+
* constant, label or type DECLARED with that name is some other kind of
|
|
87
|
+
* appearance, and any one of them could be what `name.m()` means here (JLS
|
|
88
|
+
* 6.4.2: a variable obscures a type, and a type a package). Reading the
|
|
89
|
+
* negative is what keeps this short: there are a dozen ways to declare a name
|
|
90
|
+
* in Java and only these few ways to use one as a qualifier.
|
|
91
|
+
*/
|
|
92
|
+
export function usedOnlyAsQualifier(root, name) {
|
|
93
|
+
return cached(qualifierCache, root, name, () => walkQualifierUses(root, name));
|
|
94
|
+
}
|
|
95
|
+
/*
|
|
96
|
+
* Both whole-file questions are asked once per name per proof, and a scan
|
|
97
|
+
* asks thousands - so the answer is kept per tree and name. A tree is never
|
|
98
|
+
* edited, so it never goes stale.
|
|
99
|
+
*/
|
|
100
|
+
const qualifierCache = new WeakMap();
|
|
101
|
+
const bindingCache = new WeakMap();
|
|
102
|
+
function cached(cache, root, name, compute) {
|
|
103
|
+
const key = root.tree;
|
|
104
|
+
let perTree = cache.get(key);
|
|
105
|
+
if (!perTree) {
|
|
106
|
+
perTree = new Map();
|
|
107
|
+
cache.set(key, perTree);
|
|
108
|
+
}
|
|
109
|
+
let answer = perTree.get(name);
|
|
110
|
+
if (answer === undefined) {
|
|
111
|
+
answer = compute();
|
|
112
|
+
perTree.set(name, answer);
|
|
113
|
+
}
|
|
114
|
+
return answer;
|
|
115
|
+
}
|
|
116
|
+
function walkQualifierUses(root, name) {
|
|
117
|
+
const same = (a, b) => !!a && a.startIndex === b.startIndex && a.endIndex === b.endIndex;
|
|
118
|
+
let ok = true;
|
|
119
|
+
const visit = (n) => {
|
|
120
|
+
if (!ok)
|
|
121
|
+
return;
|
|
122
|
+
if (n.type === 'package_declaration' || n.type === 'import_declaration')
|
|
123
|
+
return;
|
|
124
|
+
if (n.type === 'identifier' && n.text === name) {
|
|
125
|
+
const p = n.parent;
|
|
126
|
+
const qualifier = !!p &&
|
|
127
|
+
(((p.type === 'method_invocation' || p.type === 'field_access') && same(p.childForFieldName('object'), n)) ||
|
|
128
|
+
(p.type === 'scoped_identifier' && same(p.childForFieldName('scope'), n)) ||
|
|
129
|
+
(p.type === 'field_access' && same(p.childForFieldName('field'), n)) ||
|
|
130
|
+
(p.type === 'method_invocation' && same(p.childForFieldName('name'), n)));
|
|
131
|
+
if (!qualifier)
|
|
132
|
+
ok = false;
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
for (const child of n.namedChildren)
|
|
136
|
+
if (child)
|
|
137
|
+
visit(child);
|
|
138
|
+
};
|
|
139
|
+
visit(root);
|
|
140
|
+
return ok;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Does the file bind `name` in a way the constant proof's write survey does
|
|
144
|
+
* not collect - a lambda parameter, a pattern variable (`instanceof T name`,
|
|
145
|
+
* `case T name ->`, a record pattern), a try-with-resources variable, a
|
|
146
|
+
* record component, or an enum constant? Any one of them can shadow the
|
|
147
|
+
* declaration the proof found (tests/probes/p15, p16, j01, j02).
|
|
148
|
+
*/
|
|
149
|
+
export function boundElsewhere(root, name) {
|
|
150
|
+
return cached(bindingCache, root, name, () => walkBindings(root, name));
|
|
151
|
+
}
|
|
152
|
+
function walkBindings(root, name) {
|
|
153
|
+
let found = false;
|
|
154
|
+
const word = new RegExp(`(^|[^\\w$])${name.replace(/\$/g, '\\$')}(?![\\w$])`);
|
|
155
|
+
const visit = (n) => {
|
|
156
|
+
if (found)
|
|
157
|
+
return;
|
|
158
|
+
if (n.type === 'lambda_expression') {
|
|
159
|
+
const params = n.childForFieldName('parameters');
|
|
160
|
+
if (params && word.test(params.text ?? ''))
|
|
161
|
+
found = true;
|
|
162
|
+
}
|
|
163
|
+
else if (n.type === 'instanceof_expression') {
|
|
164
|
+
if (n.childForFieldName('name')?.text === name)
|
|
165
|
+
found = true;
|
|
166
|
+
}
|
|
167
|
+
else if (n.type === 'type_pattern' || n.type === 'record_pattern_component') {
|
|
168
|
+
if (n.namedChildren.some((c) => c?.type === 'identifier' && c.text === name))
|
|
169
|
+
found = true;
|
|
170
|
+
}
|
|
171
|
+
else if (n.type === 'resource' || n.type === 'enum_constant') {
|
|
172
|
+
if (n.childForFieldName('name')?.text === name)
|
|
173
|
+
found = true;
|
|
174
|
+
}
|
|
175
|
+
else if (n.type === 'record_declaration') {
|
|
176
|
+
const components = n.childForFieldName('parameters')?.namedChildren ?? [];
|
|
177
|
+
if (components.some((c) => c?.childForFieldName('name')?.text === name))
|
|
178
|
+
found = true;
|
|
179
|
+
}
|
|
180
|
+
if (!found)
|
|
181
|
+
for (const child of n.namedChildren)
|
|
182
|
+
if (child)
|
|
183
|
+
visit(child);
|
|
184
|
+
};
|
|
185
|
+
visit(root);
|
|
186
|
+
return found;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Where a Java declaration of a variable is visible: a local from its own
|
|
190
|
+
* declaration to the end of the block that holds it (a `for` header's local,
|
|
191
|
+
* the whole `for`); a field or interface constant, its whole class body.
|
|
192
|
+
* Null for anything else - the caller treats that as "cannot place it".
|
|
193
|
+
*/
|
|
194
|
+
export function declarationScope(declarator) {
|
|
195
|
+
const holder = declarator.parent;
|
|
196
|
+
if (!holder)
|
|
197
|
+
return null;
|
|
198
|
+
if (holder.type === 'local_variable_declaration') {
|
|
199
|
+
const region = holder.parent;
|
|
200
|
+
if (!region)
|
|
201
|
+
return null;
|
|
202
|
+
return { region, from: declarator.endIndex };
|
|
203
|
+
}
|
|
204
|
+
if (holder.type === 'field_declaration' || holder.type === 'constant_declaration') {
|
|
205
|
+
const body = holder.parent;
|
|
206
|
+
if (!body)
|
|
207
|
+
return null;
|
|
208
|
+
return { region: body, from: body.startIndex };
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=java-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-scope.js","sourceRoot":"","sources":["../../../src/taint/java-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WHAT A LOCAL MAP GIVES BACK UNDER A KEY - WHEN THAT IS A FACT.
|
|
3
|
+
*
|
|
4
|
+
* The tracer taints a collection whole: one dirty `put` and every `get` comes
|
|
5
|
+
* back dirty, marked as a guess about which element was read. That is the
|
|
6
|
+
* right default, because in general a map's contents are not on the page -
|
|
7
|
+
* it can be passed to a helper, filled by a framework, iterated, merged.
|
|
8
|
+
*
|
|
9
|
+
* keyed-container.java refuses to match keys for exactly that reason, on a
|
|
10
|
+
* request's attributes: filters and frameworks the scan never sees can write
|
|
11
|
+
* under the same name, so matching the key would be a guess.
|
|
12
|
+
*
|
|
13
|
+
* This module answers the narrow case where it is NOT a guess, and declines
|
|
14
|
+
* everything else. Java only, and only when every write the map can ever
|
|
15
|
+
* receive is visible right here:
|
|
16
|
+
*
|
|
17
|
+
* - declared in this block as `new HashMap<...>()` or `new LinkedHashMap<...>()`
|
|
18
|
+
* with no arguments (a copy constructor would bring in contents unseen);
|
|
19
|
+
* - every mention of it is `map.put("literal", value);` as its OWN statement
|
|
20
|
+
* directly in that block - never under an if, a loop or a try, so each put
|
|
21
|
+
* certainly runs - or a read (`get`, `containsKey`, `size`, `isEmpty`);
|
|
22
|
+
* - it is never passed, returned, assigned, iterated, captured by anything
|
|
23
|
+
* that writes to it, or touched by any other method;
|
|
24
|
+
* - the read is not inside a lambda or an inner class, which could run after
|
|
25
|
+
* puts that come later in the text;
|
|
26
|
+
* - some put under that key comes before the read. The last one is the value.
|
|
27
|
+
*
|
|
28
|
+
* Keys are compared as literal text, and only literals with no escapes: two
|
|
29
|
+
* Java string literals are equal() exactly when their characters match, and a
|
|
30
|
+
* HashMap uses equals(). A TreeMap with a comparator does not, which is one of
|
|
31
|
+
* the reasons only the two hash maps are accepted.
|
|
32
|
+
*/
|
|
33
|
+
import type { Node } from 'web-tree-sitter';
|
|
34
|
+
import type { LanguageId } from '../parse/languages.js';
|
|
35
|
+
export interface MapRead {
|
|
36
|
+
readonly mapName: string;
|
|
37
|
+
readonly key: string;
|
|
38
|
+
/** The `map.put(key, value)` call whose value this read returns. */
|
|
39
|
+
readonly put: Node;
|
|
40
|
+
/** The value expression of that put. */
|
|
41
|
+
readonly value: Node;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The put a `map.get("key")` certainly returns, or null whenever that is not a
|
|
45
|
+
* fact. Null always means "use the old whole-collection answer", never "clean".
|
|
46
|
+
*/
|
|
47
|
+
export declare function resolveMapRead(call: Node, language: LanguageId): MapRead | null;
|
|
48
|
+
/** Assignment-like writes to `name` strictly between two source offsets - any, in any form. */
|
|
49
|
+
export declare function writtenBetween(fn: Node, name: string, from: number, to: number): boolean;
|
|
50
|
+
/** The method or constructor containing a node, for callers that need to scan it. */
|
|
51
|
+
export declare function enclosingMethod(from: Node): Node | null;
|
|
52
|
+
/** Whether `name`, as declared in `fn`, holds a value that can never change in place. */
|
|
53
|
+
export declare function declaredImmutable(fn: Node, name: string): boolean;
|
|
54
|
+
export interface ListRead {
|
|
55
|
+
readonly listName: string;
|
|
56
|
+
readonly index: number;
|
|
57
|
+
/** The `list.add(value)` call whose value this read returns. */
|
|
58
|
+
readonly add: Node;
|
|
59
|
+
readonly value: Node;
|
|
60
|
+
}
|
|
61
|
+
/** The element a `list.get(n)` certainly returns, or null whenever that is not a fact. */
|
|
62
|
+
export declare function resolveListRead(call: Node, language: LanguageId): ListRead | null;
|
|
63
|
+
export declare function resolvePythonListRead(read: Node): ListRead | null;
|
|
64
|
+
/** The Python function a node sits in, or null at module level. */
|
|
65
|
+
export declare function enclosingPythonFunction(from: Node): Node | null;
|
|
66
|
+
/** Whether any identifier spelled `name` appears in `fn` strictly between two offsets. */
|
|
67
|
+
export declare function mentionedBetween(fn: Node, name: string, from: number, to: number): boolean;
|
|
68
|
+
export declare function resolvePythonDictRead(read: Node): ContainerRead | null;
|
|
69
|
+
/** A read from a local map or list, resolved to the write that supplies it. */
|
|
70
|
+
export interface ContainerRead {
|
|
71
|
+
readonly container: string;
|
|
72
|
+
/** How the read picks its element, for a sentence: `"keyA"` or `index 1`. */
|
|
73
|
+
readonly selector: string;
|
|
74
|
+
/** The put or add whose value this read returns. */
|
|
75
|
+
readonly write: Node;
|
|
76
|
+
readonly value: Node;
|
|
77
|
+
}
|
|
78
|
+
/** Try the map proof, then the list proof. Null means "use the whole-collection answer". */
|
|
79
|
+
export declare function resolveContainerRead(call: Node, language: LanguageId): ContainerRead | null;
|