metube-git
The PKGBUILD runs 'npm install' with specific external packages (@fortawesome/angular-fontawesome, ngx-socket-io) not declared in source array or verified by checksum, posing a supply-chain risk if the npm registry is compromised or spoofed during build.
Triggered rules
npm_install_external
Runs `npm/yarn/pnpm install <package>` for a package not in source=(), pulling unpinned, unreviewed code at build time. Severity downgraded: the package declares/looks like a Node.js consumer, where build-time installs are expected.
-
PKGBUILD:37
npm install @fortawesome/angular-fontawesome@latest ngx-socket-io@latest
llm_review
An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is MEDIUM (confidence 85%): The PKGBUILD runs 'npm install' with specific external packages (@fortawesome/angular-fontawesome, ngx-socket-io) not declared in source array or verified by checksum, posing a supply-chain risk if the npm registry is compromised or spoofed during build.
PKGBUILD
1 offending line(s) highlighted# Maintainer: devome <evinedeng@hotmail.com>
# Maintainer: caoticofanegas<>
_pkgname=metube
pkgname="${_pkgname}-git"
pkgver=r838.7938837
pkgrel=1
pkgdesc="Self-hosted YouTube downloader (web UI for youtube-dl / yt-dlp)"
arch=("any")
url="https://github.com/alexta69/${_pkgname}"
license=("AGPL-3.0-or-later")
provides=("${_pkgname}")
conflicts=("${_pkgname}")
depends=(aria2 ffmpeg python-aiohttp python-brotli python-mutagen python-pycryptodomex python-simple-websocket python-socketio python-watchfiles yt-dlp)
makedepends=("git" "npm")
source=("${_pkgname}::git+${url}"
"${_pkgname}.service"
"${_pkgname}.sh")
sha256sums=('SKIP'
'de07b835827462a4b7c19fe2dd73b02faed87b4a2b33c50627385d4b92bab71c'
'2b63a9c2b307da510b6b1804a87f510d2147a45c86e133581297f4ac9c348ac1')
options=("!strip" "!debug")
prepare() {
echo -e "## Means of environment variables see: https://github.com/alexta69/metube\n" > "${_pkgname}.env"
find "${_pkgname}/app" -type f | xargs -I {} sed -i 's/\r$//g' {}
sed -i 's/python3/python/' "${_pkgname}/app/main.py"
awk '/_DEFAULTS *= *\{/,/\s\}/' "${_pkgname}/app/main.py" | sed -n 's/^[ \t]*\([^:]*\):[ \t]*\(.*\),/\1: \2/p' | sed -E -e "s|^'|#|g" -e "s|' ?: |=|" >> "${_pkgname}.env"
}
pkgver() {
cd "${_pkgname}"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
build() {
cd "${_pkgname}/ui"
npm install @fortawesome/angular-fontawesome@latest ngx-socket-io@latest
npm install
npm ci
./node_modules/.bin/ng build --configuration production
}
package() {
install -Dm755 "${_pkgname}.sh" "${pkgdir}/usr/bin/${_pkgname}"
install -Dm644 "${_pkgname}.service" "${pkgdir}/usr/lib/systemd/user/${_pkgname}.service"
install -Dm644 "${_pkgname}.env" "${pkgdir}/usr/share/${_pkgname}/${_pkgname}.env.example"
cd "${_pkgname}"
install -Dm644 app/*.py -t "${pkgdir}/usr/share/${_pkgname}/app"
find "ui/dist" -type f | \
xargs -I {} install -Dm644 {} "${pkgdir}/usr/share/${_pkgname}/"{}
}
Changes since previous scan
--- PKGBUILD @ 2026-06-18 16:11+++ PKGBUILD @ 2026-09-07 19:15@@ -2,7 +2,7 @@ # Maintainer: caoticofanegas<> _pkgname=metube pkgname="${_pkgname}-git"-pkgver=r725.e30a24f+pkgver=r838.7938837 pkgrel=1 pkgdesc="Self-hosted YouTube downloader (web UI for youtube-dl / yt-dlp)" arch=("any")@@ -34,6 +34,7 @@ build() { cd "${_pkgname}/ui"+ npm install @fortawesome/angular-fontawesome@latest ngx-socket-io@latest npm install npm ci ./node_modules/.bin/ng build --configuration productionScan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-07 19:15:19 | Medium | 2 |
| 2026-06-18 16:11:54 | Clean | 0 |