Skip to content

Security: kiwi2k00/_RemoveMetadata

Security

SECURITY.md

Security

Reporting a vulnerability

Do not open a public issue. A metadata cleaner that fails to clean is a privacy problem for people who have already trusted it, so a public report puts existing users at risk before a fix exists.

Use GitHub's private reporting: Security → Advisories → Report a vulnerability on this repository.

Please include:

  • what happens, and what should have happened
  • a sample file that shows it — strip your own real data from it first; synthetic metadata like Nguyen Van A and made-up coordinates is ideal
  • the browser or Node version, and the operating system

You will get a first reply within seven days. If a report is confirmed, the fix lands as soon as it is ready and the advisory is published afterwards, crediting you unless you prefer otherwise.

What counts as a vulnerability here

  • Metadata that survives cleaning. A field the tool claims to remove but does not — this is the core failure mode and the most serious.
  • Data leaving the device. Any request the page makes other than the Google Maps link the user deliberately clicked.
  • Data persisting on the device. Anything written to localStorage, sessionStorage, indexedDB or a cookie.
  • Code execution from a crafted file. Metadata is untrusted input. A file whose metadata escapes into the page as markup or script, or into a terminal as an escape sequence, is a vulnerability.
  • Corruption presented as success. A file reported as cleaned that no longer opens, or a video that no longer plays.

What does not

  • Formats that are not supported yet — RAW, HEIC, MKV, AVI, WebM. These are declined with exit code 1 and left untouched. Please open a normal issue requesting support.
  • Metadata this tool never claimed to remove. Check the format table in README.md first.
  • Information visible in the file's content. See the scope statement below.

Scope — read this before relying on the tool

This tool reduces risk. It does not guarantee anonymity.

That distinction matters, so here is exactly what it means.

What it removes is listed in the format table in README.md: EXIF and GPS, XMP and IPTC, PNG text chunks, QuickTime and iTunes atoms, ID3 tags, PDF /Info and XMP packets, Office document properties and archive timestamps.

What it does not touch:

  • The visible content of the file. Faces, licence plates, street signs, house numbers, a name badge, a screen reflection, a signature on a scanned document, the text of a letter. For many people this is the larger exposure, and no metadata tool addresses it.
  • Unsupported formats. Camera RAW, HEIC/HEIF, MKV, AVI, WebM.
  • Whatever happens after you share the file. Some platforms strip metadata on upload, some keep it, some add their own. Do not assume.
  • Traces elsewhere on your device. Thumbnail caches, cloud sync copies, chat app caches, the original file you kept.
  • Statistical or forensic traces. Sensor noise patterns, compression fingerprints and similar techniques can link a photo to a camera regardless of metadata. This tool does not defend against a well-resourced adversary.

If your safety depends on this

If you are a journalist, an activist, a human-rights defender, someone escaping an abusive situation, or anyone with reason to think they are being watched:

  1. Verify the result yourself. exiftool -a -G1 <cleaned-file> lists what is still present. It reads far more tags than this tool removes, so it is a genuine second opinion.
  2. Use mat2 as well.
  3. For a sensitive PDF, re-print it to a fresh PDF rather than trusting an in-place edit.
  4. Look at the picture itself, not only its metadata.
  5. Consider whether sharing the file at all is the right move.

This software is provided as-is, without warranty of any kind. See LICENSE.

Design decisions that limit the blast radius

  • No network code exists in the shipped file. There is no upload path to abuse.
  • No storage APIs are used, so nothing is left behind on a shared computer.
  • No runtime dependencies, so there is no supply chain to compromise.
  • Metadata values reach the page through textContent and the terminal through a control-character filter, so a crafted file cannot inject markup or escape sequences.
  • The engine returns a verdict instead of throwing, so a malformed file cannot put the tool in a half-finished state.

tests/invariants.test.js enforces each of these on every push.

There aren't any published security advisories