vpuppr-bin
Triggered rules
pip_install_external
`pip install <package>` fetches an unpinned package from PyPI at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:53
pip3 install opencv-python 2> /dev/null
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 82%): The PKGBUILD has two real concerns: (1) During package() it runs 'pip3 install opencv-python' without any version pin or hash verification, installing an unpinned PyPI package into the system Python environment at build/install time. This is a genuine supply-chain risk — a compromised or typosquatted opencv-python release on PyPI would execute arbitrary code. (2) It also fetches an icon via curl from GitHub at package() time without any integrity check, though this is lower risk as it is just image data. The pip install is the primary concern: it bypasses pacman's dependency tracking, installs into the live system (not pkgdir), and is unpinned. The upstream binary itself is from the official GitHub releases page with a sha256sum, which is fine. Overall this is a real medium-severity supply-chain concern, not a false positive, though not an active attack.
PKGBUILD
1 offending line(s) highlighted# Maintainer: ByteDream
pkgname=vpuppr-bin
pkgdesc="VTuber application made with Godot 3.5"
arch=('x86_64')
url="https://github.com/virtual-puppet-project/vpuppr"
license=('MIT')
pkgver=0.9.0
pkgrel=3
replaces=(
'openseeface-gd'
'puppeteer'
)
depends=(
'python'
'python-pip'
)
source=("${pkgname}-${pkgver}.zip::https://github.com/virtual-puppet-project/vpuppr/releases/download/${pkgver}/vpuppr_${pkgver}_linux.zip")
sha256sums=('95c436e55a68e4abeb967acfa0ec9717dd6e0472ee72c346ded5aeb4a65ef587')
pre_install() {
for v in "" "3" "3.10" "3.9" "3.8" "3.7"; do
if "python$v" --version 2> /dev/null | grep -E -q "3.([7-9]|10)\."; then
return
fi
done
echo "No valid python version detected. Please install any python version from 3.7 - 3.10 to run VPupPr correctly." >&2
exit 1
}
package() {
mkdir -p $pkgdir/usr/{share/vpuppr,share/applications,bin}
cp -rf ./flatpak/* $pkgdir/usr/share/vpuppr
chmod 755 -R $pkgdir/usr/share/vpuppr/*
ln -sf ../share/vpuppr/vpuppr.x86_64 $pkgdir/usr/bin/vpuppr
curl -L https://github.com/virtual-puppet-project/vpuppr/raw/0.9.0/assets/osfgd_icon.png -o "$pkgdir/usr/share/vpuppr/vpuppr_icon.png"
cat > "$pkgdir/usr/share/applications/vpuppr.desktop"<< EOF
[Desktop Entry]
Name=VPupPr
Exec=/usr/share/vpuppr/vpuppr.x86_64
Icon=/usr/share/vpuppr/vpuppr_icon.png
Type=Application
Categories=Graphics;AudioVideo;Recoder;
Terminal=False
EOF
# the bundled opencv doesn't work in some cases. installing the newest version via pip and symlinking the opencv directory fixes this issues
pip3 install opencv-python 2> /dev/null
rm -r $pkgdir/usr/share/vpuppr/resources/extensions/openseeface-tracker/OpenSeeFace/cv2
ln -s $(python3 -c 'import site; print(site.getsitepackages()[0])')/cv2 $pkgdir/usr/share/vpuppr/resources/extensions/openseeface-tracker/OpenSeeFace/cv2
}
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 |