cursor-appimage
The package downloads a prebuilt AppImage from a non-standard host (downloads.cursor.com) which is not on the standard whitelist; while the source is likely official, the unverifiable nature of the binary executable from a non-standard domain constitutes a supply-chain risk.
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:22
"Cursor-${pkgver}.AppImage::https://downloads.cursor.com/production/${_commit}/linux/x64/Cursor-${pkgver}-x86_64.AppImage"
llm_review
An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is MEDIUM (confidence 95%): The package downloads a prebuilt AppImage from a non-standard host (downloads.cursor.com) which is not on the standard whitelist; while the source is likely official, the unverifiable nature of the binary executable from a non-standard domain constitutes a supply-chain risk.
PKGBUILD
1 offending line(s) highlighted# Maintainer: kewl fft <kewl@alto.eu.org>
pkgname=cursor-appimage
pkgver=3.27.14
pkgrel=1
_ver=3.27
_commit="69b724ebc67ec522c1b5d287a5025f7a7e81be97"
pkgdesc="Cursor AI code editor (AppImage, extracted)"
arch=('x86_64')
url="https://www.cursor.com"
license=('custom')
depends=('glibc' 'gtk3' 'nss' 'libxss' 'alsa-lib')
conflicts=('cursor-bin')
provides=('cursor')
options=(!strip)
_watch=(
'https://api2.cursor.sh/updates/download/golden/linux-x64/cursor/${_ver}' 'header' 'regex' 'Cursor-([0-9.]+)-x86_64.AppImage' 'pkgver'
'https://api2.cursor.sh/updates/download/golden/linux-x64/cursor/${_ver}' 'header' 'regex' 'location:.*production/([a-f0-9]+)/' '_commit'
)
source=(
"Cursor-${pkgver}.AppImage::https://downloads.cursor.com/production/${_commit}/linux/x64/Cursor-${pkgver}-x86_64.AppImage"
)
sha512sums=('8078590e84ca94df21ab3bb168ab9bdcd35e9be359775ed846a5485af679584730e382fdd9d64a06dfe35dbb39630ff82d283ca46e0fb27656735e7305720961')
prepare() {
cd "${srcdir}"
chmod +x Cursor-${pkgver}.AppImage
./Cursor-${pkgver}.AppImage --appimage-extract
}
package() {
install -d "${pkgdir}/opt/cursor"
cp -a squashfs-root/* "${pkgdir}/opt/cursor/"
chmod -R 755 "${pkgdir}/opt/cursor/"
# --- FIX APPIMAGE ---
# Replace broken AppRun with working launcher
cat > "${pkgdir}/opt/cursor/AppRun" <<'EOF'
#!/bin/bash
HERE="$(cd "$(dirname "$0")" && pwd)"
export PATH="$HERE/usr/bin:$PATH"
export LD_LIBRARY_PATH="$HERE/usr/lib:$HERE/usr/lib64:$HERE/lib:$LD_LIBRARY_PATH"
export XDG_DATA_DIRS="$HERE/usr/share:$XDG_DATA_DIRS"
exec "$HERE/usr/share/cursor/cursor" "$@"
EOF
chmod +x "${pkgdir}/opt/cursor/AppRun"
# chrome sandbox (required by Electron)
if [[ -f "${pkgdir}/opt/cursor/chrome-sandbox" ]]; then
chmod 4755 "${pkgdir}/opt/cursor/chrome-sandbox"
fi
# CLI launcher
install -Dm755 /dev/stdin "${pkgdir}/usr/bin/cursor" <<'EOF'
#!/bin/bash
exec /opt/cursor/AppRun "$@"
EOF
# Desktop entry
install -Dm644 squashfs-root/cursor.desktop \
"${pkgdir}/usr/share/applications/cursor.desktop"
sed -i 's|^Exec=.*|Exec=cursor %F|' \
"${pkgdir}/usr/share/applications/cursor.desktop"
sed -i 's|^Icon=.*|Icon=cursor|' \
"${pkgdir}/usr/share/applications/cursor.desktop"
# Icons
for size in 16 32 48 64 128 256 512; do
icon="squashfs-root/usr/share/icons/hicolor/${size}x${size}/apps/cursor.png"
[[ -f "$icon" ]] && install -Dm644 "$icon" \
"${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/cursor.png"
done
}
Changes since previous scan
--- PKGBUILD @ 2026-10-31 00:07+++ PKGBUILD @ 2026-11-01 00:21@@ -1,10 +1,10 @@ # Maintainer: kewl fft <kewl@alto.eu.org> pkgname=cursor-appimage-pkgver=3.25.6+pkgver=3.27.14 pkgrel=1-_ver=3.25-_commit="f0df777c412b670d09e3eaf214967d779e67c088"+_ver=3.27+_commit="69b724ebc67ec522c1b5d287a5025f7a7e81be97" pkgdesc="Cursor AI code editor (AppImage, extracted)" arch=('x86_64') url="https://www.cursor.com"@@ -22,7 +22,7 @@ "Cursor-${pkgver}.AppImage::https://downloads.cursor.com/production/${_commit}/linux/x64/Cursor-${pkgver}-x86_64.AppImage" ) -sha512sums=('986d5d79d88286097b2a59b71aa9d9d8a14b75d911d1ceb638d88274c61edc473e0b26b4d478218bd8fcac6e9016dfbbda3277c651a271feed07c62969fd7260')+sha512sums=('8078590e84ca94df21ab3bb168ab9bdcd35e9be359775ed846a5485af679584730e382fdd9d64a06dfe35dbb39630ff82d283ca46e0fb27656735e7305720961') prepare() { cd "${srcdir}"Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | Medium | 2 |
| 2026-10-31 07:58:04 | Medium | 2 |
| 2026-10-31 00:07:41 | Medium | 2 |
| 2026-10-30 00:29:30 | Medium | 2 |
| 2026-10-29 00:13:55 | Medium | 2 |
| 2026-10-28 00:06:54 | Medium | 2 |
| 2026-10-27 05:46:44 | Medium | 2 |
| 2026-10-27 00:23:28 | Medium | 2 |
| 2026-10-26 00:12:40 | Medium | 2 |
| 2026-10-25 00:20:48 | Medium | 2 |
| 2026-10-24 00:14:55 | Medium | 2 |
| 2026-10-23 00:02:19 | Medium | 2 |
| 2026-10-22 00:13:10 | Medium | 2 |
| 2026-10-21 00:12:50 | Medium | 2 |
| 2026-10-20 00:10:31 | Medium | 2 |
| 2026-10-19 00:03:55 | Medium | 2 |
| 2026-10-18 00:06:55 | Medium | 2 |
| 2026-10-17 07:17:15 | Medium | 2 |
| 2026-10-17 00:21:55 | Medium | 2 |
| 2026-10-16 00:12:47 | Medium | 2 |