Please open a private report via GitHub Security Advisories rather than a public issue. You should receive a response within a week.
mfn is a local developer tool. It is designed so that untrusted input
(strings, tokens, file contents, port numbers) can never escalate into code
execution or unintended process termination:
- No shell interpolation. Every external process (
npm,lsof,netstat,kill,taskkill) is spawned withexecFile— arguments are passed as an array, never interpolated into a shell string. A crafted package name or port value cannot inject commands. - Strict input validation. Ports must be integers in 1..65535; counts,
sizes, and byte lengths have hard upper bounds; PIDs parsed from
lsof/netstatoutput must be strictly numeric before being passed tokill. - JWTs are decoded, never verified or transmitted.
mfn decodeperforms local base64url decoding only; the token never leaves the machine, and the output explicitly states the signature is not verified. - Crypto uses Node's CSPRNG.
randomandidusenode:crypto(randomBytes,randomUUID) with rejection sampling — noMath.random, no modulo bias. - Local cache is private.
~/.mfn/cache(recent ports, ignore lists) is created with mode0700. - No network calls except
mfn update, which delegates tonpmitself. - No telemetry. Nothing is collected or sent anywhere.
mfn hashsupportsmd5/sha1for checksum interop with legacy systems — they are not suitable for security purposes; usesha256/sha512.mfn killsendsSIGKILLto processes the invoking user owns; it cannot affect other users' processes beyond what the OS already permits.mfn update <package>installs a named package globally via npm — only point it at packages you trust, exactly as withnpm install -g.
Only the latest published major (3.x) receives security fixes.