eggnogg
The PKGBUILD dynamically resolves a download URL at build time by POSTing to itch.io and parsing the JSON response, then downloads and installs a prebuilt 32-bit game binary from that resolved URL. The binary is not in source=() and has no checksum verification whatsoever. While itch.io is a legitimate game distribution platform and madgarden is the apparent upstream developer, the dynamic URL resolution bypasses Arch's reproducible/verifiable build model entirely: any compromise of the itch.io API endpoint or a MITM could substitute an arbitrary binary that gets installed and executed. The lack of any integrity check on the downloaded tarball or its contents is the core concern. This is a genuine supply-chain risk (unverified executed binary from a dynamically resolved host), consistent with MEDIUM severity.
Triggered rules
external_download_not_in_source
curl/wget fetches a URL on a non-allowlisted host that is not part of source=(), so it is not checksum-verified by makepkg.
-
PKGBUILD:22
game_url=$(curl -s -XPOST "https://madgarden.itch.io/eggnogg/file/908?after_download_lightbox=true" | grep -Po '"url":.*?[^\\]",' | cut -c8- | rev | cut -c3- | rev | sed 's/\\\//\//g')
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=('http://madgarden.net/junkz/madgarden/eggnogg/icon-1.png')
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 82%): The PKGBUILD dynamically resolves a download URL at build time by POSTing to itch.io and parsing the JSON response, then downloads and installs a prebuilt 32-bit game binary from that resolved URL. The binary is not in source=() and has no checksum verification whatsoever. While itch.io is a legitimate game distribution platform and madgarden is the apparent upstream developer, the dynamic URL resolution bypasses Arch's reproducible/verifiable build model entirely: any compromise of the itch.io API endpoint or a MITM could substitute an arbitrary binary that gets installed and executed. The lack of any integrity check on the downloaded tarball or its contents is the core concern. This is a genuine supply-chain risk (unverified executed binary from a dynamically resolved host), consistent with MEDIUM severity.
PKGBUILD
2 offending line(s) highlighted# Maintainer: Joseph Ryan <josephryan3.14@gmail.com>
pkgname=eggnogg
pkgver=1.0
pkgrel=1
pkgdesc="Classic version of sword fighting arcade game"
arch=('any')
url="https://madgarden.itch.io/eggnogg"
license=('custom')
makedepends=('tar' 'curl' 'gendesk')
depends=('lib32-libglvnd' 'lib32-sdl_mixer')
source=('http://madgarden.net/junkz/madgarden/eggnogg/icon-1.png')
md5sums=('a6eb8862c233b3a85a70ada0f8542edc')
_name='EGGNOGG'
_categories='Game;ArcadeGame'
prepare() {
gendesk -n -f ${startdir}/PKGBUILD
}
build() {
cd ${srcdir}/
game_url=$(curl -s -XPOST "https://madgarden.itch.io/eggnogg/file/908?after_download_lightbox=true" | grep -Po '"url":.*?[^\\]",' | cut -c8- | rev | cut -c3- | rev | sed 's/\\\//\//g')
curl -o eggnogg-linux.tar.gz ${game_url}
tar xzf eggnogg-linux.tar.gz
}
package() {
cd ${srcdir}/eggnogg-linux
mkdir -p ${pkgdir}/usr/share/games/${pkgname}
mkdir -p ${pkgdir}/usr/bin/
mkdir -p ${pkgdir}/usr/share/icons/hicolor/64x64/apps/
install -Dm644 "${srcdir}/${pkgname}.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop"
cp ${srcdir}/icon-1.png ${pkgdir}/usr/share/icons/hicolor/64x64/apps/${pkgname}.png
cp -a eggnogg data README.txt ${pkgdir}/usr/share/games/${pkgname}/
# The game needs to be launched from the data parent directory and it needs write access to this folder
echo -e "#!/bin/sh\ncd /usr/share/games/${pkgname}\n./eggnogg" > ${pkgdir}/usr/bin/${pkgname}
chmod +x ${pkgdir}/usr/bin/${pkgname}
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Medium | 3 |
| 2026-09-16 00:03:17 | Medium | 3 |
| 2026-09-15 00:25:31 | Medium | 3 |
| 2026-09-14 00:27:57 | Medium | 3 |
| 2026-09-13 00:19:54 | Medium | 3 |
| 2026-09-12 00:25:17 | Medium | 3 |
| 2026-09-11 00:19:22 | Medium | 3 |
| 2026-09-10 00:22:44 | Medium | 3 |
| 2026-09-09 00:04:09 | Medium | 3 |
| 2026-09-08 00:18:08 | Medium | 3 |
| 2026-09-07 00:30:15 | Medium | 3 |
| 2026-09-06 00:17:06 | Medium | 3 |
| 2026-09-05 00:16:27 | Medium | 3 |
| 2026-09-04 00:03:13 | Medium | 3 |
| 2026-09-03 00:15:47 | Medium | 3 |
| 2026-09-02 00:02:31 | Medium | 3 |
| 2026-09-01 00:11:19 | Medium | 3 |
| 2026-08-31 00:19:57 | Medium | 3 |
| 2026-08-30 00:04:14 | Medium | 3 |
| 2026-08-29 00:29:17 | Medium | 3 |