vicinae-appimage-bin
The PKGBUILD downloads the latest AppImage from GitHub's official API (api.github.com/repos/vicinaehq/vicinae/releases/latest) and verifies its SHA-256 digest against the value embedded in the GitHub release JSON before executing it. The execution (./vicinae.Appimage --appimage-extract) is the standard AppImage self-extraction mechanism, not arbitrary code execution in the malicious sense. However, there are legitimate concerns: (1) The source array pins a sha256sum for the static vicinae.sh wrapper and the github-release.json snapshot, but the actual AppImage binary is fetched dynamically at build time with its checksum pulled from the same untrusted release JSON — meaning a compromised GitHub release could swap both the binary and its digest simultaneously, bypassing integrity verification. (2) The AppImage is a pre-compiled binary from a third-party GitHub repo with no reproducible build. These are supply-chain concerns typical of *-bin AppImage packages in the AUR, not active malware. The pattern is common and well-understood in AUR packaging. Rating medium due to the dynamic binary fetch with self-referential checksum (not independently pinned), not high because there is no obfuscation, no exfiltration, and the source is the official upstream GitHub release endpoint.
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 GitHub's official API (api.github.com/repos/vicinaehq/vicinae/releases/latest) and verifies its SHA-256 digest against the value embedded in the GitHub release JSON before executing it. The execution (./vicinae.Appimage --appimage-extract) is the standard AppImage self-extraction mechanism, not arbitrary code execution in the malicious sense. However, there are legitimate concerns: (1) The source array pins a sha256sum for the static vicinae.sh wrapper and the github-release.json snapshot, but the actual AppImage binary is fetched dynamically at build time with its checksum pulled from the same untrusted release JSON — meaning a compromised GitHub release could swap both the binary and its digest simultaneously, bypassing integrity verification. (2) The AppImage is a pre-compiled binary from a third-party GitHub repo with no reproducible build. These are supply-chain concerns typical of *-bin AppImage packages in the AUR, not active malware. The pattern is common and well-understood in AUR packaging. Rating medium due to the dynamic binary fetch with self-referential checksum (not independently pinned), not high because there is no obfuscation, no exfiltration, and the source is the official upstream GitHub release endpoint.
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.29.2
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-10-20 00:10+++ PKGBUILD @ 2026-11-01 00:21@@ -2,7 +2,7 @@ # Maintainer: cilgin <cilgincc@outlook.com> pkgname=vicinae-appimage-bin-pkgver=0.28.1+pkgver=0.29.2 pkgrel=1 pkgdesc="Raycast like FOSS app on Linux" arch=('x86_64')Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | 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 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 01:29:07 | Medium | 2 |
| 2026-10-20 01:27:05 | High | 1 |
| 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 00:21:55 | Medium | 2 |
| 2026-10-16 00:12:47 | Medium | 2 |
| 2026-10-15 00:28:05 | Medium | 2 |