mrupdater
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:11
'mrupdater.zip::https://s3.us-east-1.amazonaws.com/updates.modretro.com/apps/MRUpdater-linux-x86_64.zip'
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): The package downloads a prebuilt AppImage (executable binary) from an AWS S3 bucket (s3.us-east-1.amazonaws.com/updates.modretro.com) that is operated by ModRetro, the upstream vendor. The AppImage is then executed during the build phase (chmod +x + run with --appimage-extract) and installed as /usr/bin/mrupdater. A sha256 checksum is present, which mitigates substitution attacks at the point of download, but the host is an S3 bucket rather than a canonical VCS release (e.g. GitHub Releases), meaning the object could be silently replaced by whoever controls the bucket without a tag/release audit trail. The license is listed as 'unknown', and the binary is closed-source with no source build. This is a real supply-chain concern (prebuilt closed-source binary from a cloud storage bucket, executed at install time) but there is no evidence of active malice, making MEDIUM the appropriate rating.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Leonie Ain <me@koyu.space>
pkgname=mrupdater
pkgver=1.7.0
pkgrel=2
pkgdesc="ModRetro's official tool for updating your Chromatic firmware"
arch=('x86_64')
url="https://modretro.com"
license=('unknown')
depends=('fuse2' 'zlib')
source=(
'mrupdater.zip::https://s3.us-east-1.amazonaws.com/updates.modretro.com/apps/MRUpdater-linux-x86_64.zip'
'mrupdater.desktop'
'99-modretro.rules'
)
sha256sums=('4eaffc24ad54a63ab983ae03278f3cc011c41356f17cb63cc1c6e1d6cc193551'
'd9f9ed521e6b1fa7a1ed29706ecd9c82e0fab325d569e0b23bc602da2723c20c'
'850c99f36f919d337070a22d8d0b711f85d140d0e7e744cc9545d52d8a51de32')
options=('!strip')
package() {
cd "$srcdir"
# Find the AppImage file
appimage=$(find . -name "*.AppImage" -type f | head -n 1)
if [ -z "$appimage" ]; then
error "No AppImage found in the archive"
return 1
fi
# Extract icon from AppImage
chmod +x "$appimage"
"$appimage" --appimage-extract >/dev/null 2>&1 || true
# Find and install icon
if [ -d "squashfs-root" ]; then
# Look for icon files
icon=$(find squashfs-root -name "*.png" -o -name "*.svg" | grep -i icon | head -n 1)
if [ -n "$icon" ]; then
iconext="${icon##*.}"
install -Dm644 "$icon" "$pkgdir/usr/share/pixmaps/mrupdater.$iconext"
fi
fi
# Install the AppImage
install -Dm755 "$appimage" "$pkgdir/usr/bin/mrupdater"
# Install desktop entry from srcdir
install -Dm644 "$srcdir/mrupdater.desktop" "$pkgdir/usr/share/applications/mrupdater.desktop"
# Install udev rules
install -Dm644 "$srcdir/99-modretro.rules" "$pkgdir/etc/udev/rules.d/99-modretro.rules"
}
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 |