fix: allowlist match without local exec resolution
This commit is contained in:
@@ -465,6 +465,21 @@ function matchesPattern(pattern: string, target: string): boolean {
|
|||||||
return regex.test(normalizedTarget);
|
return regex.test(normalizedTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function resolveAllowlistCandidatePath(
|
||||||
|
resolution: CommandResolution | null,
|
||||||
|
cwd?: string,
|
||||||
|
): string | undefined {
|
||||||
|
if (!resolution) return undefined;
|
||||||
|
if (resolution.resolvedPath) return resolution.resolvedPath;
|
||||||
|
const raw = resolution.rawExecutable?.trim();
|
||||||
|
if (!raw) return undefined;
|
||||||
|
const expanded = raw.startsWith("~") ? expandHome(raw) : raw;
|
||||||
|
if (!expanded.includes("/") && !expanded.includes("\\")) return undefined;
|
||||||
|
if (path.isAbsolute(expanded)) return expanded;
|
||||||
|
const base = cwd && cwd.trim() ? cwd.trim() : process.cwd();
|
||||||
|
return path.resolve(base, expanded);
|
||||||
|
}
|
||||||
|
|
||||||
export function matchAllowlist(
|
export function matchAllowlist(
|
||||||
entries: ExecAllowlistEntry[],
|
entries: ExecAllowlistEntry[],
|
||||||
resolution: CommandResolution | null,
|
resolution: CommandResolution | null,
|
||||||
@@ -770,7 +785,12 @@ export function evaluateExecAllowlist(params: {
|
|||||||
}
|
}
|
||||||
const allowSkills = params.autoAllowSkills === true && (params.skillBins?.size ?? 0) > 0;
|
const allowSkills = params.autoAllowSkills === true && (params.skillBins?.size ?? 0) > 0;
|
||||||
const allowlistSatisfied = params.analysis.segments.every((segment) => {
|
const allowlistSatisfied = params.analysis.segments.every((segment) => {
|
||||||
const match = matchAllowlist(params.allowlist, segment.resolution);
|
const candidatePath = resolveAllowlistCandidatePath(segment.resolution, params.cwd);
|
||||||
|
const candidateResolution =
|
||||||
|
candidatePath && segment.resolution
|
||||||
|
? { ...segment.resolution, resolvedPath: candidatePath }
|
||||||
|
: segment.resolution;
|
||||||
|
const match = matchAllowlist(params.allowlist, candidateResolution);
|
||||||
if (match) allowlistMatches.push(match);
|
if (match) allowlistMatches.push(match);
|
||||||
const safe = isSafeBinUsage({
|
const safe = isSafeBinUsage({
|
||||||
argv: segment.argv,
|
argv: segment.argv,
|
||||||
|
|||||||
Reference in New Issue
Block a user