49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { sanitizeEnv } from "./invoke.js";
|
|
|
|
describe("node-host sanitizeEnv", () => {
|
|
it("ignores PATH overrides", () => {
|
|
const prev = process.env.PATH;
|
|
process.env.PATH = "/usr/bin";
|
|
try {
|
|
const env = sanitizeEnv({ PATH: "/tmp/evil:/usr/bin" }) ?? {};
|
|
expect(env.PATH).toBe("/usr/bin");
|
|
} finally {
|
|
if (prev === undefined) {
|
|
delete process.env.PATH;
|
|
} else {
|
|
process.env.PATH = prev;
|
|
}
|
|
}
|
|
});
|
|
|
|
it("blocks dangerous env keys/prefixes", () => {
|
|
const prevPythonPath = process.env.PYTHONPATH;
|
|
const prevLdPreload = process.env.LD_PRELOAD;
|
|
try {
|
|
delete process.env.PYTHONPATH;
|
|
delete process.env.LD_PRELOAD;
|
|
const env =
|
|
sanitizeEnv({
|
|
PYTHONPATH: "/tmp/pwn",
|
|
LD_PRELOAD: "/tmp/pwn.so",
|
|
FOO: "bar",
|
|
}) ?? {};
|
|
expect(env.FOO).toBe("bar");
|
|
expect(env.PYTHONPATH).toBeUndefined();
|
|
expect(env.LD_PRELOAD).toBeUndefined();
|
|
} finally {
|
|
if (prevPythonPath === undefined) {
|
|
delete process.env.PYTHONPATH;
|
|
} else {
|
|
process.env.PYTHONPATH = prevPythonPath;
|
|
}
|
|
if (prevLdPreload === undefined) {
|
|
delete process.env.LD_PRELOAD;
|
|
} else {
|
|
process.env.LD_PRELOAD = prevLdPreload;
|
|
}
|
|
}
|
|
});
|
|
});
|