Skip to content

NOIR 0.4.2 — security & safety release

Latest

Choose a tag to compare

@github-actions github-actions released this 07 Nov 14:20
· 9 commits to main since this release

NOIR v0.4.2 — security & safety release

Everyone running 0.4.1 or earlier should update.

This release fixes issues that could cause unexpected AppOps changes, unintended uninstalls, lost rollback records, and false-negative scans. If you use --apply, noir block, or noir deepscan --purge, update before your next run.

Critical fixes

  • --apply=false, --yes=false, and --purge=false are now treated as false. Previously they were treated as enabled, which could change device state or skip confirmation when you explicitly asked not to.
  • rollback.txt is now written only after a successful apply, includes the device serial, and is no longer erased by a later scan or dry run. This is the safety net for AppOps changes.
  • noir block no longer emits the obsolete PROJECT_MEDIA no-op or runs AppOps after uninstalling a package. It performs a per-user uninstall and writes a concrete block-rollback.txt.
  • noir deepscan --purge now uses the current Android user, writes purge-rollback.txt, and states clearly that reinstalling restores the APK but not app data.
  • Failed AppOps commands and non-interactive --apply without --yes now exit nonzero instead of silently claiming success.
  • User-supplied package names are validated, and adb/jadx commands have real timeouts.
  • Tool downloads reject non-HTTPS redirects and zip-slip paths.

Scan accuracy

  • Split APKs and classes16.dex+ are scanned.
  • Failed pulls/parses are no longer cached as “no endpoints”; the cache is scoped to the device/build.
  • DeepScan no longer reuses a stale APK or stale decompiled sources.
  • Runtime.getRuntime().exec is detected again.
  • Upload detection now covers /stats, /logs, /tracking, /analytics, /metrics, and /crash.
  • Coarse location and legacy storage permissions are included.
  • Domain classification no longer treats static, biometrics, or soundtrack as trackers.
  • Manifest/AXML/Dumpsys parsing handles application permissions, provider read/write permissions, enabled=false, default allowBackup, malformed AXML, legacy userId=, and shared UIDs.

Reports and CLI

  • Reports add stable leaksByType keys; HTML/Markdown escaping and upload-host counting are fixed.
  • noir diff rejects empty/malformed reports and records scan filters.
  • Global flags work before commands; noir scan --help no longer runs a scan.
  • --ascii, 40/50-column layouts, CJK table alignment, and Chinese TUI labels are fixed.

Packaging

  • Intel (x86_64) and Apple Silicon (arm64) macOS builds are both published.
  • Tagged releases run the test suite before packaging.
  • Portable archives include the MIT LICENSE and SHA256SUMS.txt.

Upgrade notes

  1. Download the asset for your platform and replace the old portable directory.
  2. Keep --apply / block / purge review habits: this release makes destructive intent explicit, but it still changes device state only when you ask.
  3. The endpoint cache moved to endpoints-v3.tsv; the first scan after upgrading will rebuild it.
  4. Verify SHA256SUMS.txt before running any downloaded build.

Full changelog: https://github.com/Verlintas/NOIR/blob/main/CHANGELOG.md
Source: https://github.com/Verlintas/NOIR

If you are unsure whether to update: yes, update. The previous version could act on --flag=false and could lose the rollback record.