lbry-sdk
The PKGBUILD uses `pip install pyinstaller` during the build phase without pinning a version or providing a checksum, pulling an arbitrary version of pyinstaller from PyPI at build time. While PyPI is a legitimate ecosystem mirror, installing an unpinned external package during build is a real supply-chain concern: a compromised or typosquatted pyinstaller release could execute arbitrary code during the build, and the resulting binary (a PyInstaller-bundled single-file executable) is then installed directly to /usr/bin/lbrynet. The risk is compounded by the use of `|| true` on patches (masking patch failures silently) and the fact that the final installed artifact is a compiled binary whose contents depend on the unverified pip-fetched tool. This is a genuine medium-severity supply-chain concern, not a false positive.
Triggered rules
pip_install_external
`pip install <package>` fetches an unpinned package from PyPI at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:33
pip install pyinstaller
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): The PKGBUILD uses `pip install pyinstaller` during the build phase without pinning a version or providing a checksum, pulling an arbitrary version of pyinstaller from PyPI at build time. While PyPI is a legitimate ecosystem mirror, installing an unpinned external package during build is a real supply-chain concern: a compromised or typosquatted pyinstaller release could execute arbitrary code during the build, and the resulting binary (a PyInstaller-bundled single-file executable) is then installed directly to /usr/bin/lbrynet. The risk is compounded by the use of `|| true` on patches (masking patch failures silently) and the fact that the final installed artifact is a compiled binary whose contents depend on the unverified pip-fetched tool. This is a genuine medium-severity supply-chain concern, not a false positive.
PKGBUILD
1 offending line(s) highlighted# Maintainer: missing <liri_bucketful at slmail dot me>
pkgname=lbry-sdk
pkgver=0.112.0
pkgrel=1
pkgdesc="The LBRY SDK for building decentralized, censorship resistant, monetized, digital content apps."
arch=('x86_64')
url="https://github.com/lbryio/lbry-sdk"
license=('MIT')
makedepends=('git' 'cmake' 'python')
provides=('lbrynet')
conflicts=('lbrynet')
options=('!buildflags')
source=("${pkgname}-${pkgver}.tar.gz::https://github.com/lbryio/lbry-sdk/archive/refs/tags/v${pkgver}.tar.gz"
"lbry-sdk-${pkgver}.patch"
'lbry-venv.patch')
sha256sums=('bc1466b1ef99ffacbb7ee1ef5df301a6c9ce86c2df505de714ba5db69839c2ce'
'6d7ae523b05dab708f7bcb6fe0ea6d0008512cc1d895202204dfacfccb27d83d'
'053e7f128eb0ab4e5637f94a3a08af3a80c851b57f4eab26710ec1c85bcce6e7')
build() {
python -m venv lbry-venv
source lbry-venv/bin/activate
patch --strip=0 --input="lbry-sdk-${pkgver}.patch" || true
cd "lbry-sdk-${pkgver}"
make install
cd ..
patch --strip=0 --input=lbry-venv.patch || true
mkdir build
cd build
pip install pyinstaller
pyinstaller --onefile --name lbrynet "../lbry-sdk-${pkgver}/lbry/extras/cli.py"
}
package() {
install -Dm755 "${srcdir}/build/dist/lbrynet" "${pkgdir}/usr/bin/lbrynet"
install -Dm644 "${srcdir}/lbry-sdk-${pkgver}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | Medium | 2 |
| 2026-10-31 00:07:41 | Medium | 2 |
| 2026-10-30 00:29:30 | Medium | 2 |
| 2026-10-29 00:13:55 | Medium | 2 |
| 2026-10-28 00:06:54 | Medium | 2 |
| 2026-10-27 00:23:28 | Medium | 2 |
| 2026-10-26 00:12:40 | Medium | 2 |
| 2026-10-25 00:20:48 | Medium | 2 |
| 2026-10-24 00:14:55 | Medium | 2 |
| 2026-10-23 00:02:19 | Medium | 2 |
| 2026-10-22 00:13:10 | Medium | 2 |
| 2026-10-21 00:12:50 | Medium | 2 |
| 2026-10-20 00:10:31 | Medium | 2 |
| 2026-10-19 00:03:55 | Medium | 2 |
| 2026-10-18 00:06:55 | Medium | 2 |
| 2026-10-17 00:21:55 | Medium | 2 |
| 2026-10-16 00:12:47 | Medium | 2 |
| 2026-10-15 00:28:05 | Medium | 2 |
| 2026-10-14 00:06:47 | Medium | 2 |
| 2026-10-13 00:23:45 | Medium | 2 |