rpcs3-bin
The PKGBUILD fetches the official RPCS3 AppImage from GitHub's official release API (api.github.com/repos/RPCS3/rpcs3-binaries-linux/releases/latest) and executes it only to extract its contents (--appimage-extract), which is the standard pattern for AppImage-based AUR packages. The executed binary comes from the official RPCS3 GitHub releases, not an attacker-controlled host. The sha256sums is SKIP because the version is dynamically resolved at build time (a common but sloppy practice for -bin packages tracking latest releases). The dynamic URL resolution via curl+awk is unusual but not malicious - it simply finds the AppImage asset URL from the GitHub API response. The main concern is the lack of checksum verification (SKIP), meaning a MITM or compromised GitHub release could substitute a malicious binary, but this is a packaging quality issue rather than active malice in the PKGBUILD itself. This is a false positive for HIGH risk.
Triggered rules
llm_review
The static rules flagged this HIGH, but an AI model (anthropic/claude-sonnet-4.6) reviewed the full PKGBUILD and judged it LOW (confidence 85%): The PKGBUILD fetches the official RPCS3 AppImage from GitHub's official release API (api.github.com/repos/RPCS3/rpcs3-binaries-linux/releases/latest) and executes it only to extract its contents (--appimage-extract), which is the standard pattern for AppImage-based AUR packages. The executed binary comes from the official RPCS3 GitHub releases, not an attacker-controlled host. The sha256sums is SKIP because the version is dynamically resolved at build time (a common but sloppy practice for -bin packages tracking latest releases). The dynamic URL resolution via curl+awk is unusual but not malicious - it simply finds the AppImage asset URL from the GitHub API response. The main concern is the lack of checksum verification (SKIP), meaning a MITM or compromised GitHub release could substitute a malicious binary, but this is a packaging quality issue rather than active malice in the PKGBUILD itself. This is a false positive for HIGH risk.
1 higher static finding superseded - not the current verdict (shown for transparency)
download_then_exec
A file fetched with curl/wget (not part of source=(), so never checksum-verified) is later made executable or run — a fetch-and-execute pattern split across statements.
-
PKGBUILD:52
chmod +x "${srcdir}/rpcs3.AppImage"
PKGBUILD
1 offending line(s) highlighted# Creator: Sanpi <sanpi+aur@homecomputing.fr>
# Maintainer: italoghost <eduprodive at posteo dot me>
# Maintainer: Kaleb
pkgname=rpcs3-bin
_pkgname=rpcs3
pkgver=0.0.42.19734
pkgrel=1
pkgdesc='Open-source Sony PlayStation 3 Emulator (Latest Binary)'
arch=('x86_64')
url='https://rpcs3.net/'
license=('GPL-2.0-only')
provides=("$_pkgname")
conflicts=("$_pkgname")
options=('!strip' '!zipman' '!emptydirs' '!debug')
depends=(
'glibc'
'libgcc'
'zlib'
'bash'
'libx11'
'libxcb'
'vulkan-icd-loader'
'libglvnd'
'alsa-lib'
'fontconfig'
'freetype2'
'e2fsprogs'
'libstdc++'
'gmp'
'libdrm'
'libgpg-error'
)
optdepends=('wayland')
makedepends=('curl' 'jq')
# Source the GitHub API to trigger the build, the actual AppImage is fetched in prepare()
source=("${_pkgname}::https://api.github.com/repos/RPCS3/rpcs3-binaries-linux/releases/latest")
sha256sums=('SKIP')
pkgver() {
# Cleanly fetch the latest tag name from GitHub API and format it
curl -s "https://api.github.com/repos/RPCS3/rpcs3-binaries-linux/releases/latest" | \
jq -r '(.name | gsub("-"; "."))'
}
prepare() {
# Dynamically find the download URL for the AppImage asset
_appimage_url=$(curl -s "https://api.github.com/repos/RPCS3/rpcs3-binaries-linux/releases/latest" | \
awk -F'"' '/browser_download_url.*rpcs3.*AppImage/ {print $4}')
msg2 "Downloading the actual AppImage..."
curl -L "$_appimage_url" -o "${srcdir}/rpcs3.AppImage"
chmod +x "${srcdir}/rpcs3.AppImage"
}
build() {
cd "${srcdir}"
# Extracting AppImage content into squashfs-root
./rpcs3.AppImage --appimage-extract
# Patch AppRun to point to the fixed installation directory in /opt
sed -i "s|this_dir=\"\$(readlink -f \"\$(dirname \"\$0\")\")\"|this_dir=\"/opt/${_pkgname}\"|" "$srcdir/squashfs-root/AppRun"
}
package() {
# Core directories
install -dm755 "$pkgdir/opt/${_pkgname}"
cp -rp "$srcdir"/squashfs-root/* "$pkgdir/opt/${_pkgname}/"
# Symlink the launcher to /usr/bin
install -dm755 "$pkgdir/usr/bin"
ln -sf "/opt/${_pkgname}/AppRun" "$pkgdir/usr/bin/${_pkgname}"
# Install Icon, Desktop and Metainfo
install -Dm644 "$srcdir/squashfs-root/${_pkgname}.svg" "$pkgdir/usr/share/pixmaps/${_pkgname}.svg"
install -Dm644 "$srcdir/squashfs-root/${_pkgname}.desktop" "$pkgdir/usr/share/applications/${_pkgname}.desktop"
install -Dm644 "$srcdir/squashfs-root/usr/share/metainfo/${_pkgname}.metainfo.xml" "$pkgdir/usr/share/metainfo/${_pkgname}.metainfo.xml"
# Permissions
chmod -R u+rwX,go+rX,go-w "${pkgdir}/opt/${_pkgname}"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Low | 2 |
| 2026-09-16 00:03:17 | Low | 2 |
| 2026-09-15 00:25:31 | Low | 2 |
| 2026-09-14 00:27:57 | Low | 2 |
| 2026-09-13 00:19:54 | Low | 2 |
| 2026-09-12 00:25:17 | Low | 2 |
| 2026-09-11 00:19:22 | Low | 2 |
| 2026-09-10 00:22:44 | Low | 2 |
| 2026-09-09 00:04:09 | Low | 2 |
| 2026-09-08 00:18:08 | Low | 2 |
| 2026-09-07 00:30:15 | Low | 2 |
| 2026-09-06 00:17:06 | Low | 2 |
| 2026-09-05 00:16:27 | Low | 2 |
| 2026-09-04 00:03:13 | Low | 2 |
| 2026-09-03 00:15:47 | Low | 2 |
| 2026-09-02 00:02:31 | Low | 2 |
| 2026-09-01 00:11:19 | Low | 2 |
| 2026-08-31 00:19:57 | Low | 2 |
| 2026-08-30 00:04:14 | Low | 2 |
| 2026-08-29 00:29:17 | Low | 2 |