krunker
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:17
'https://client2.krunker.io/setup.AppImage'
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): The PKGBUILD downloads a prebuilt AppImage binary from client2.krunker.io (the official Krunker game client CDN, not a personal/unofficial host) with SKIP'd checksum. The host appears to be the official distribution endpoint for the Krunker desktop client, which explains the SKIP — the URL serves a rolling/latest release without a versioned filename, so a pinned hash would break on updates. However, SKIP on an executed binary is a genuine supply-chain concern: there is no integrity verification, meaning a compromised CDN or MITM could substitute arbitrary code that gets installed and executed. The AppImage is also extracted and run during the package() phase (./$_filename --appimage-extract ...) which executes the downloaded binary at build time. This is a real medium-severity concern: an unofficial-ish CDN subdomain serving an unversioned, unchecksum'd executable that is both run at build time and installed for user execution. Not clearly malicious, but the lack of any integrity check on an executed binary warrants medium.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Jimin Kim <developomp@gmail.com>
pkgname='krunker'
pkgver='2.1.3'
pkgrel=1
pkgdesc="A free Multiplayer Online Game. No Download needed."
arch=('x86_64')
license=('custom') # https://krunker.io/docs/terms.txt
url='https://krunker.io'
options=(!strip) # necessary otherwise the AppImage file in the package is truncated
depends=()
makedepends=()
source=(
'https://client2.krunker.io/setup.AppImage'
'terms.txt'
'krunker'
)
sha256sums=(
'SKIP'
'f1181c174d40d8f38117dc86a498df1db45ccd52ee0d0c3028be7a8c8b5560cc'
'3226cb60d743aab6f1704d08ee9e581c526a91c6b44cd0162324f6e4c1e2b7e5'
)
_filename=krunker.AppImage
package() {
# Change filename from setup.AppImage to krunker.AppImage
mv "setup.AppImage" $_filename
chmod +x $_filename
mkdir -p squashfs-root/usr/share/icons/hicolor/{72x72,16x16}/apps
./$_filename --appimage-extract "usr/share/icons/hicolor/*/apps/io.krunker.desktop.png" > /dev/null 2>&1
./$_filename --appimage-extract io.krunker.desktop.desktop > /dev/null 2>&1
INSTALL_PATH="/opt/appimages/$_filename"
sed -i -E "s|Exec=AppRun|Exec=$INSTALL_PATH|" squashfs-root/io.krunker.desktop.desktop
sed -i -E "s|Icon=io.krunker.desktop|Icon=/usr/share/icons/hicolor/0x0/apps/io.krunker.desktop.png|" squashfs-root/io.krunker.desktop.desktop
# install icons
install -dm755 "$pkgdir/usr/share/icons"
cp -dpr --no-preserve=ownership "squashfs-root/usr/share/icons" "$pkgdir/usr/share"
chmod -R 755 "$pkgdir/usr/share/icons"
find "$pkgdir/usr/share/icons" -type f -name "io.krunker.desktop.png" -exec chmod 644 {} \;
# install .desktop file and image file
install -Dm644 "squashfs-root/io.krunker.desktop.desktop" "$pkgdir/usr/share/applications/krunker.desktop"
install -Dm755 "$_filename" "$pkgdir$INSTALL_PATH"
# install license file
install -Dm644 "terms.txt" "$pkgdir/usr/share/licenses/krunker/terms.txt"
# disable AppImage integration prompt
# https://github.com/electron-userland/electron-builder/issues/1962
install -dm755 "$pkgdir/usr/share/appimagekit"
touch "$pkgdir/usr/share/appimagekit/no_desktopintegration"
chmod 644 "$pkgdir/usr/share/appimagekit/no_desktopintegration"
# Launch script
mkdir -p "$pkgdir/usr/bin/"
install -Dm755 "$srcdir/krunker" "$pkgdir/usr/bin/krunker"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | MEDIUM | 2 |
| 2026-08-02 00:16:08 | MEDIUM | 2 |
| 2026-08-01 00:11:18 | MEDIUM | 2 |
| 2026-07-31 00:14:10 | MEDIUM | 2 |
| 2026-07-30 00:17:23 | MEDIUM | 2 |
| 2026-07-29 00:25:53 | MEDIUM | 2 |
| 2026-07-28 00:07:28 | MEDIUM | 2 |
| 2026-07-27 00:24:32 | MEDIUM | 2 |
| 2026-07-26 00:07:32 | MEDIUM | 2 |
| 2026-07-25 00:13:44 | MEDIUM | 2 |
| 2026-07-24 00:02:28 | MEDIUM | 2 |
| 2026-07-23 00:14:47 | MEDIUM | 2 |
| 2026-07-22 00:29:32 | MEDIUM | 2 |
| 2026-07-21 00:24:15 | MEDIUM | 2 |
| 2026-07-20 00:19:49 | MEDIUM | 2 |
| 2026-07-19 00:17:08 | MEDIUM | 2 |
| 2026-07-18 00:14:48 | MEDIUM | 2 |
| 2026-07-17 00:06:16 | MEDIUM | 2 |
| 2026-07-16 00:05:41 | MEDIUM | 2 |
| 2026-07-15 00:09:25 | MEDIUM | 2 |