gopanda
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:13
source_x86_64=("https://pandanet-igs.com/gopanda2/download/GoPanda2.AppImage")
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): This PKGBUILD downloads a prebuilt proprietary AppImage binary directly from pandanet-igs.com (the official vendor site for the GoPanda2 go client) and executes it during prepare() to extract its contents. The domain appears to be the legitimate upstream vendor, which reduces risk compared to a personal/random host. However, the source URL has no version pinning (the filename is just 'GoPanda2.AppImage' with no version in the URL), meaning the downloaded binary could silently change without the checksum catching it on a rebuild — though the md5sum does provide a point-in-time integrity check. The check() function attempts to verify the version matches pkgver, which is a reasonable mitigation. The main concern is: (1) a prebuilt binary is executed, (2) the URL is not version-specific so future downloads could differ, and (3) MD5 is a weak hash. This is a genuine medium-risk supply-chain pattern — an executed binary from an external host with weak integrity verification — even though the host appears to be the legitimate vendor.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Alex Kubica <alexkubicail@gmail.com>
# Contributor: Sébastien Feugère <smonff@riseup.net>
# Contributor: Dario Klingenberg <dario.klingenberg at web.de>
pkgname=gopanda
pkgver=2.8.3
pkgrel=1
pkgdesc="Client for the Pandanet-IGS go Server"
arch=('x86_64')
url="http://pandanet-igs.com/communities/gopanda2"
license=('custom')
depends=(fuse2)
options=(!strip)
source_x86_64=("https://pandanet-igs.com/gopanda2/download/GoPanda2.AppImage")
md5sums_x86_64=('133aaa6cf74acc5715efd3c3cd8bb322')
_DEST="/opt/${pkgname}"
_CLIENT="GoPanda2.AppImage"
_NAME="GoPanda2"
_DESKTOP="/usr/share/applications/${_CLIENT}.desktop"
_ICON="/usr/share/pixmaps/${_NAME}.png"
prepare() {
chmod u+x "${srcdir}/${_CLIENT}"
./${_CLIENT} --appimage-extract 2> /dev/null
}
check() {
MATCH=$(cat ${srcdir}/squashfs-root/gopanda2.desktop | grep X-AppImage-Version=$pkgver || [[ $? == 1 ]])
if [[ -z ${MATCH} ]]; then
echo "Version check failed! A newer version has been released, but the
PKGBUILD has not yet been updated. Change the pkgver and checksums in
the PKGUILB yourself and/or leave a comment at
https://aur.archlinux.org/packages/gopanda/ so that the PKGBUILD will be
updated.";
exit 1;
fi
}
package() {
# Copy license
install -Dm644 "${srcdir}/squashfs-root/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
cd "$srcdir/"
# Program
install -Dm755 "${_CLIENT}" "${pkgdir}${_DEST}/${_CLIENT}"
# Link to program
install -dm755 "${pkgdir}/usr/bin"
ln -s "${_DEST}/${_CLIENT}" "${pkgdir}/usr/bin/${pkgname}"
# Icon
install -Dm644 "${srcdir}/squashfs-root/${pkgname}2.png" "${pkgdir}${_ICON}"
# Desktop file
install -Dm644 "${srcdir}/squashfs-root/${pkgname}2.desktop" "${pkgdir}${_DESKTOP}"
echo "Exec=${_DEST}/${_CLIENT}" >> "${pkgdir}${_DESKTOP}"
echo "Icon=${_ICON}" >> "${pkgdir}${_DESKTOP}"
echo "MimeType=application/x-go-sgf;application/x-go-ugf;application/x-go-ugi;" >> "${pkgdir}${_DESKTOP}"
rm -r "${srcdir}/squashfs-root"
}
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 |