cactus-client
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:18
source=("https://dw.cactuss.top/$_version/Cactus-$_version-public-linux_x86_64.tar.xz" "cactus-client.png")
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 85%): This PKGBUILD downloads and installs a prebuilt binary (DDNet executable) from a personal/unofficial host (dw.cactuss.top) rather than building from source or pulling from an official upstream release mirror. The binary is executed directly by users. While a sha256sum is provided, it only guards against accidental corruption — if the host operator replaces the tarball with a new one at the same URL and updates the PKGBUILD, or if the host is compromised, users would execute arbitrary code. The host 'cactuss.top' appears to be a personal/community site for this DDRaceNetwork mod, not an established official vendor. Additionally, there is a version mismatch bug: the wrapper script hardcodes version 1.14 while the package is 1.15, and the icon is installed to the wrong path relative to what the desktop file references — but these are correctness issues, not security ones. The core concern is a prebuilt binary from a non-official personal host, which is a genuine medium-severity supply-chain risk.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Rain Xelelo <rxelelo@outlook.com>
pkgname=cactus-client
pkgver=1.15
pkgrel=1
# allow testing locally a release candidate using pkgver like '19.3rc3'
_version=${pkgver/rc/-rc}
pkgdesc="A DDRaceNetwork modification adding new feauters"
arch=('x86_64')
url="https://cactuss.top//"
license=()
depends=('freetype2' 'opusfile' 'curl' 'glew' 'wavpack' 'ffmpeg' 'libnotify' 'miniupnpc' 'sqlite' 'mariadb-libs' 'vulkan-icd-loader')
checkdepends=('gmock')
optdepends=('ddnet-maps-git: All the maps used on the official DDNet Servers.'
'discord-game-sdk: Enable rich presence in Discord desktop client.')
backup=('usr/share/ddnet/data/autoexec_server.cfg')
source=("https://dw.cactuss.top/$_version/Cactus-$_version-public-linux_x86_64.tar.xz" "cactus-client.png")
sha256sums=('70b5afcdbf7f8ec875780391b2238a29dec3fc2c420bc72f7dbfaf86d56f397b'
'8508552983950820bd5c8829bd43e714a4a958a084211dc1a8be6619f8d0b742')
prepare() {
mkdir -p cactus
bsdtar -xf "Cactus-$_version-public-linux_x86_64.tar.xz" -C cactus
chmod +x cactus/Cactus-$_version-public-linux_x86_64/DDNet
}
package() {
install -dm0755 "$pkgdir/opt"
install -dm0755 "$pkgdir/usr/bin"
install -dm0755 "$pkgdir/usr/share/applications"
cp -a cactus "$pkgdir/opt/$pkgname"
cat > "$pkgdir/usr/bin/cactus-client" << EOF
#!/bin/bash
exec /opt/cactus-client/Cactus-1.14-public-linux_x86_64/DDNet
EOF
chmod +x $pkgdir/usr/bin/cactus-client
cat > "$pkgdir/usr/share/applications/cactus-client.desktop" << EOF
[Desktop Entry]
Version=1.14
Name=Cactus Client
StartupNotify=true
TryExec=cactus-client
Exec=cactus-client
Terminal=false
Icon=/opt/cactus-client/cactus-client.png
Type=Application
Categories=Game
EOF
install -Dm0644 "$srcdir/cactus-client.png" "$pkgdir/opt/cactus-client/cactus-client.png"
}
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 |