mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 04:17:42 +00:00
test(config): dedupe traversal include assertions
This commit is contained in:
@@ -388,6 +388,18 @@ describe("real-world config patterns", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe("security: path traversal protection (CWE-22)", () => {
|
describe("security: path traversal protection (CWE-22)", () => {
|
||||||
|
function expectRejectedTraversalPaths(
|
||||||
|
cases: ReadonlyArray<{ includePath: string; expectEscapesMessage: boolean }>,
|
||||||
|
) {
|
||||||
|
for (const testCase of cases) {
|
||||||
|
const obj = { $include: testCase.includePath };
|
||||||
|
expect(() => resolve(obj, {}), testCase.includePath).toThrow(ConfigIncludeError);
|
||||||
|
if (testCase.expectEscapesMessage) {
|
||||||
|
expect(() => resolve(obj, {}), testCase.includePath).toThrow(/escapes config directory/);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
describe("absolute path attacks", () => {
|
describe("absolute path attacks", () => {
|
||||||
it("rejects absolute path attack variants", () => {
|
it("rejects absolute path attack variants", () => {
|
||||||
const cases = [
|
const cases = [
|
||||||
@@ -397,13 +409,7 @@ describe("security: path traversal protection (CWE-22)", () => {
|
|||||||
{ includePath: "/tmp/malicious.json", expectEscapesMessage: false },
|
{ includePath: "/tmp/malicious.json", expectEscapesMessage: false },
|
||||||
{ includePath: "/", expectEscapesMessage: false },
|
{ includePath: "/", expectEscapesMessage: false },
|
||||||
] as const;
|
] as const;
|
||||||
for (const testCase of cases) {
|
expectRejectedTraversalPaths(cases);
|
||||||
const obj = { $include: testCase.includePath };
|
|
||||||
expectResolveIncludeError(() => resolve(obj, {}));
|
|
||||||
if (testCase.expectEscapesMessage) {
|
|
||||||
expectResolveIncludeError(() => resolve(obj, {}), /escapes config directory/);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -416,13 +422,7 @@ describe("security: path traversal protection (CWE-22)", () => {
|
|||||||
{ includePath: "../sibling-dir/secret.json", expectEscapesMessage: false },
|
{ includePath: "../sibling-dir/secret.json", expectEscapesMessage: false },
|
||||||
{ includePath: "/config/../../../etc/passwd", expectEscapesMessage: false },
|
{ includePath: "/config/../../../etc/passwd", expectEscapesMessage: false },
|
||||||
] as const;
|
] as const;
|
||||||
for (const testCase of cases) {
|
expectRejectedTraversalPaths(cases);
|
||||||
const obj = { $include: testCase.includePath };
|
|
||||||
expectResolveIncludeError(() => resolve(obj, {}));
|
|
||||||
if (testCase.expectEscapesMessage) {
|
|
||||||
expectResolveIncludeError(() => resolve(obj, {}), /escapes config directory/);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user