vicinae-appimage-bin
The PKGBUILD downloads the latest AppImage from the official GitHub releases API (vicinaehq/vicinae), verifies its SHA-256 digest extracted from the GitHub release metadata, then runs it with --appimage-extract to unpack it rather than execute it as an application. The execution at line 40 is `./vicinae.Appimage --appimage-extract`, which is the standard AppImage self-extraction mechanism (equivalent to unsquashfs) and does not run the application payload. The digest check uses the hash published in the GitHub release JSON itself, which means the integrity check is only as trustworthy as the GitHub API response (no pinned hash in the PKGBUILD), but this is a common pattern for AppImage AUR packages. The main concern is that the AppImage binary is fetched from a dynamic URL resolved at build time and executed (even if only for extraction), and the integrity check relies on the same untrusted source that provides the download URL. This is a medium supply-chain concern (executed binary from a dynamic/unpinned source) rather than a clear malicious attack.
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 MEDIUM (confidence 72%): The PKGBUILD downloads the latest AppImage from the official GitHub releases API (vicinaehq/vicinae), verifies its SHA-256 digest extracted from the GitHub release metadata, then runs it with --appimage-extract to unpack it rather than execute it as an application. The execution at line 40 is `./vicinae.Appimage --appimage-extract`, which is the standard AppImage self-extraction mechanism (equivalent to unsquashfs) and does not run the application payload. The digest check uses the hash published in the GitHub release JSON itself, which means the integrity check is only as trustworthy as the GitHub API response (no pinned hash in the PKGBUILD), but this is a common pattern for AppImage AUR packages. The main concern is that the AppImage binary is fetched from a dynamic URL resolved at build time and executed (even if only for extraction), and the integrity check relies on the same untrusted source that provides the download URL. This is a medium supply-chain concern (executed binary from a dynamic/unpinned source) rather than a clear malicious attack.
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:40
chmod +x vicinae.Appimage
PKGBUILD
1 offending line(s) highlighted# Maintainer: Arjix <me@arjix.dev>
# Maintainer: cilgin <cilgincc@outlook.com>
pkgname=vicinae-appimage-bin
pkgver=0.28.0
pkgrel=1
pkgdesc="Raycast like FOSS app on Linux"
arch=('x86_64')
url="https://github.com/vicinaehq/vicinae"
options=('!debug' '!strip')
license=('GPL3')
makedepends=(jq wget)
provides=("vicinae")
conflicts=("vicinae")
source=(
"github-release.json::https://api.github.com/repos/vicinaehq/vicinae/releases/latest"
"vicinae.sh"
)
sha256sums=('89690c2db2ad56ab60a18c3e9945b57d19e6c26622c5bef21bd7f239fe524312'
'1856a49b51f1b13e8dd466d9c65690292e43d1f876c46210c8ef85c45841d33e')
pkgver() {
jq -r '.tag_name | ltrimstr("v")' github-release.json
}
prepare() {
local asset download_url digest
asset=$(jq -r '.assets[] | select(.name | endswith(".AppImage"))' github-release.json)
download_url=$(echo "$asset" | jq -r '.browser_download_url')
digest=$(echo "$asset" | jq -r '.digest | split(":")[1]')
wget -q "$download_url" -O vicinae.Appimage
echo "${digest} vicinae.Appimage" | sha256sum -c || {
echo "[ERR]: The downloaded file is corrupt."
exit 1
}
chmod +x vicinae.Appimage
./vicinae.Appimage --appimage-extract
}
package() {
install -dm755 "${pkgdir}/opt"
cp -a "${srcdir}/squashfs-root" "${pkgdir}/opt/vicinae"
install -Dm755 "${srcdir}/vicinae.sh" "${pkgdir}/usr/bin/vicinae"
install -Dm644 "${srcdir}/squashfs-root/vicinae.desktop" "${pkgdir}/usr/share/applications/vicinae.desktop"
install -Dm644 "${srcdir}/squashfs-root/vicinae.png" "${pkgdir}/usr/share/icons/hicolor/512x512/apps/vicinae.png"
install -Dm644 "${srcdir}/squashfs-root/usr/lib/systemd/user/vicinae.service" "${pkgdir}/usr/lib/systemd/user/vicinae.service"
cp -a "${srcdir}/squashfs-root/usr/share/" "${pkgdir}/usr/share/"
}
Changes since previous scan
--- PKGBUILD @ 2026-09-03 00:15+++ PKGBUILD @ 2026-09-17 00:27@@ -2,7 +2,7 @@ # Maintainer: cilgin <cilgincc@outlook.com> pkgname=vicinae-appimage-bin-pkgver=0.27.5+pkgver=0.28.0 pkgrel=1 pkgdesc="Raycast like FOSS app on Linux" arch=('x86_64')Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Medium | 2 |
| 2026-09-16 00:03:17 | Medium | 2 |
| 2026-09-15 00:25:31 | Medium | 2 |
| 2026-09-14 00:27:57 | Medium | 2 |
| 2026-09-13 00:19:54 | Medium | 2 |
| 2026-09-12 00:25:17 | Medium | 2 |
| 2026-09-11 00:19:22 | Medium | 2 |
| 2026-09-10 00:22:44 | Medium | 2 |
| 2026-09-09 00:04:09 | Medium | 2 |
| 2026-09-08 00:18:08 | Medium | 2 |
| 2026-09-07 00:30:15 | Medium | 2 |
| 2026-09-06 00:17:06 | Medium | 2 |
| 2026-09-05 00:16:27 | Medium | 2 |
| 2026-09-04 00:03:13 | Medium | 2 |
| 2026-09-03 15:55:23 | Medium | 2 |
| 2026-09-03 15:53:41 | High | 1 |
| 2026-09-03 00:15:47 | Medium | 2 |
| 2026-09-02 21:53:08 | Medium | 2 |
| 2026-09-02 21:51:32 | High | 1 |
| 2026-09-02 00:02:31 | Medium | 2 |