neatimage
Triggered rules
source_untrusted_domain
One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).
-
PKGBUILD:13
$pkgname-$pkgver.tar.gz::https://ni.neatvideo.com/demo/ni9/sld/NeatImage9SL.Demo.Intel64.tgz
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 75%): The PKGBUILD downloads a prebuilt binary installer (.run file) from ni.neatvideo.com, which is the official vendor domain for Neat Image (neatvideo.com). The host is not a random personal or unofficial mirror — it is the product's own download server. However, the package executes a self-extracting .run installer binary directly (./NeatImage9SL.Demo.Intel64.run --mode silent), which is a prebuilt opaque binary blob with no source-level verification beyond a sha512 checksum. This is a legitimate supply-chain concern: if the vendor's download server were compromised or the file replaced, the checksum would catch it, but the binary itself is fully trusted and executed with the user's privileges during package(). This is a standard pattern for proprietary software AUR packages (similar to google-chrome, zoom, etc.) and is not malicious, but it does represent a real medium-severity supply-chain risk due to the executed binary from a vendor host with no reproducible build. The 'demo' path in the URL and the installer returning exit code 1 on success are slightly unusual but not security-relevant. Overall this is a legitimate proprietary software package following common AUR conventions for closed-source software, making it closer to clean/low, but the executed binary blob justifies retaining medium.
PKGBUILD
1 offending line(s) highlighted# Maintainer : VCalV
pkgname=neatimage
pkgver=9.3.2
pkgrel=1
pkgdesc="Best noise reduction for digital cameras and scanners"
arch=('x86_64')
url="https://ni.neatvideo.com/"
license=('custom')
depends=(libxcb xcb-util-image xcb-util-keysyms xcb-util-wm xcb-util-renderutil libxkbcommon libxkbcommon-x11 fontconfig freetype2 libx11 libsm libice libxau libxdmcp xcb-util)
makedepends=()
source=(
$pkgname-$pkgver.tar.gz::https://ni.neatvideo.com/demo/ni9/sld/NeatImage9SL.Demo.Intel64.tgz
neatimage.desktop
neatimage.png
)
sha512sums=('a74de361c3a363f153d0cfaad043929e0d82b91454689fee4c49e38ca5aa7d9f6e0f9ed37e5f0e23ce42c4f4d64b53a7a3792cdf81efb9f47b831d1b1a84a4e6'
'6987c2bbf7abafa1ef76b6896dfa233f61f20d3fd96da39e078b0de18af7c83e36928b4b2fe2fea767d0d46fcdbbb6882e8f5fab10877615f726a2f549d7c84b'
'5e1ea3aabd6e87275113aea7483967717c65245984f54289943f6102121ed5c935231a611746b5d72e161d43dc5699e1af4ce00ac8946cf18a2f9fd55b51e4d4')
package() {
./NeatImage9SL.Demo.Intel64.run --prefix "$pkgdir"/opt/NeatImage --mode silent \
|| true # … and the installer returns 1 when it succeeds.
rm "$pkgdir"/opt/NeatImage/uninstall
mkdir -p "$pkgdir"/usr/share/licenses/"$pkgname"
mkdir -p "$pkgdir"/usr/share/doc/"$pkgname"
ln -s /opt/NeatImage/Legal.txt "$pkgdir"/usr/share/licenses/"$pkgname"/Legal.txt
for docfile in NeatImage.pdf Compatibility.txt ReadMe.txt WhatsNew.txt; do
ln -s /opt/NeatImage/"$docfile" "$pkgdir"/usr/share/doc/"$pkgname"/"$docfile"
done;
mkdir -p "$pkgdir"/usr/bin
for execfile in NeatImage NeatImageCL; do
cat > "$pkgdir"/usr/bin/"$execfile" <<<"#!/bin/sh
cd /opt/NeatImage/ && ./$execfile "$@""
chmod +x "$pkgdir"/usr/bin/"$execfile"
done
install -Dt "$pkgdir/usr/share/applications/" "neatimage.desktop"
install -Dt "$pkgdir/usr/share/pixmaps/" "neatimage.png"
cd "$pkgdir"/opt/NeatImage/
ln -s NeatImage9 NeatImage
ln -s NeatImage9CL NeatImageCL
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | MEDIUM | 2 |
| 2026-08-02 00:16:08 | MEDIUM | 2 |
| 2026-08-01 00:11:18 | MEDIUM | 2 |
| 2026-07-31 00:14:10 | MEDIUM | 2 |
| 2026-07-30 00:17:23 | MEDIUM | 2 |
| 2026-07-29 00:25:53 | MEDIUM | 2 |
| 2026-07-28 00:07:28 | MEDIUM | 2 |
| 2026-07-27 00:24:32 | MEDIUM | 2 |
| 2026-07-26 00:07:32 | MEDIUM | 2 |
| 2026-07-25 00:13:44 | MEDIUM | 2 |
| 2026-07-24 00:02:28 | MEDIUM | 2 |
| 2026-07-23 00:14:47 | MEDIUM | 2 |
| 2026-07-22 00:29:32 | MEDIUM | 2 |
| 2026-07-21 00:24:15 | MEDIUM | 2 |
| 2026-07-20 00:19:49 | MEDIUM | 2 |
| 2026-07-19 00:17:08 | MEDIUM | 2 |
| 2026-07-18 00:14:48 | MEDIUM | 2 |
| 2026-07-17 00:06:16 | MEDIUM | 2 |
| 2026-07-16 00:05:41 | MEDIUM | 2 |
| 2026-07-15 00:09:25 | MEDIUM | 2 |