firecamp
The package downloads a prebuilt AppImage from a DigitalOcean Spaces bucket (firecamp.ams3.digitaloceanspaces.com), which is a vendor-controlled object storage host rather than a canonical GitHub releases page or official distribution mirror. The AppImage is extracted and its contents (app.asar, node_modules, services, assets) are installed directly — these are executed JavaScript/Node artifacts. While a sha256sum is provided (mitigating silent substitution to some degree), the host is a personal/vendor S3-style bucket with no transparency log or reproducibility guarantee, and the upstream project appears to be abandoned/discontinued. The node_modules directory being copied verbatim from a binary blob is a meaningful supply-chain concern. This is a genuine medium: an executed binary artifact from a non-standard host, not a false positive.
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
source=("$pkgname-$pkgver.orig.appimage::https://firecamp.ams3.digitaloceanspaces.com/versions/linux/Firecamp-$pkgver.AppImage")
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 from a DigitalOcean Spaces bucket (firecamp.ams3.digitaloceanspaces.com), which is a vendor-controlled object storage host rather than a canonical GitHub releases page or official distribution mirror. The AppImage is extracted and its contents (app.asar, node_modules, services, assets) are installed directly — these are executed JavaScript/Node artifacts. While a sha256sum is provided (mitigating silent substitution to some degree), the host is a personal/vendor S3-style bucket with no transparency log or reproducibility guarantee, and the upstream project appears to be abandoned/discontinued. The node_modules directory being copied verbatim from a binary blob is a meaningful supply-chain concern. This is a genuine medium: an executed binary artifact from a non-standard host, not a false positive.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Bruce Zhang (bruceutut)
pkgname=firecamp
pkgver=2.3.1
pkgrel=1
pkgdesc='API platform for your favorite API-style'
arch=('x86_64')
url='https://firecamp.io/download'
license=('custom: Firecamp')
makedepends=('p7zip')
depends=('electron12')
source=("$pkgname-$pkgver.orig.appimage::https://firecamp.ams3.digitaloceanspaces.com/versions/linux/Firecamp-$pkgver.AppImage")
sha256sums=('1fd581a94cc3f4f6a3978578e69c6312d69126a026dd0f559a557c72d7db9a66')
prepare() {
7z x "$pkgname-$pkgver.orig.appimage" -ofirecamp
cd firecamp/resources
echo "#!/usr/bin/env sh
export ELECTRON_IS_DEV=0
exec electron12 /usr/lib/firecamp/app.asar --no-sandbox \$@
" > "$srcdir/firecamp.sh"
echo "[Desktop Entry]
Name=Firecamp
Exec=/usr/bin/firecamp %U
Terminal=false
Type=Application
Icon=firecamp
StartupWMClass=Firecamp
X-AppImage-Version=2.3.1
Comment=One playstation for all your Request.
MimeType=x-scheme-handler/fc;
Categories=Development;
" > "$srcdir/firecamp.desktop"
}
package() {
cd "$srcdir/firecamp/resources"
install -vDm644 app.asar "$pkgdir/usr/lib/firecamp/app.asar"
install -vDm644 app-update.yml "$pkgdir/usr/lib/firecamp/app-update.yml"
cp -rv {services,node_modules,assets} "$pkgdir/usr/lib/firecamp/"
install -vDm755 "$srcdir/firecamp.sh" "$pkgdir/usr/bin/firecamp"
install -vDm644 "$srcdir/firecamp.desktop" "$pkgdir/usr/share/applications/firecamp.desktop"
cd "$srcdir/firecamp"
install -vDm644 usr/share/icons/hicolor/0x0/apps/firecamp.png "$pkgdir/usr/share/icons/hicolor/512x512/apps/firecamp.png"
}
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 00:15:47 | Medium | 2 |
| 2026-09-02 00:02:31 | Medium | 2 |
| 2026-09-01 00:11:19 | Medium | 2 |
| 2026-08-31 00:19:57 | Medium | 2 |
| 2026-08-30 00:04:14 | Medium | 2 |
| 2026-08-29 00:29:17 | Medium | 2 |