ortfo
The PKGBUILD contains a curl-pipe-sh pattern in the prepare() function: `curl -fsSL https://get.pnpm.io/install.sh | PNPM_VERSION=7.0.0-rc.8 sh -`. This downloads and executes a shell script from an external host (get.pnpm.io) that is not listed in the source=() array and therefore has no integrity verification (no checksum). While get.pnpm.io is the official pnpm distribution endpoint, the pattern itself is a genuine supply-chain risk: if the host were compromised or the URL redirected, arbitrary code would execute during the build. The script also installs pnpm into the build environment outside of pacman's package management. Additionally, `go install github.com/rakyll/statik` fetches and compiles an external Go tool at build time without pinning a version or verifying a checksum. These are real, if not clearly malicious, supply-chain concerns. The overall risk is medium: not an active attack, but the unverified remote script execution and unpinned external tool installation represent genuine concerns that belong in this category.
Triggered rules
external_download_not_in_source
curl/wget fetches a URL on a non-allowlisted host that is not part of source=(), so it is not checksum-verified by makepkg.
-
PKGBUILD:25
which pnpm || curl -fsSL https://get.pnpm.io/install.sh | PNPM_VERSION=7.0.0-rc.8 sh -
alt_pkg_manager_install
A non-pip/npm package manager (pipx, uv, poetry, cargo install, go install, gem, conda…) fetches and builds an external package at build time, outside source=() and makepkg's checksums.
-
PKGBUILD:29
go install github.com/rakyll/statik
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 82%): The PKGBUILD contains a curl-pipe-sh pattern in the prepare() function: `curl -fsSL https://get.pnpm.io/install.sh | PNPM_VERSION=7.0.0-rc.8 sh -`. This downloads and executes a shell script from an external host (get.pnpm.io) that is not listed in the source=() array and therefore has no integrity verification (no checksum). While get.pnpm.io is the official pnpm distribution endpoint, the pattern itself is a genuine supply-chain risk: if the host were compromised or the URL redirected, arbitrary code would execute during the build. The script also installs pnpm into the build environment outside of pacman's package management. Additionally, `go install github.com/rakyll/statik` fetches and compiles an external Go tool at build time without pinning a version or verifying a checksum. These are real, if not clearly malicious, supply-chain concerns. The overall risk is medium: not an active attack, but the unverified remote script execution and unpinned external tool installation represent genuine concerns that belong in this category.
PKGBUILD
2 offending line(s) highlighted# Maintainer: ewen-lbh <hey@ewen.works>
pkgname=ortfo
pkgver=0.1.0.alpha.2
pkgrel=2
pkgdesc="The GUI for ortfo, a portfolio manager"
arch=('x86_64')
url="https://github.com/ortfo/gui"
license=("GPL-3.0")
depends=("gtk3" "webkit2gtk")
makedepends=("go" "git" "curl")
conflicts=("ortfo-git" "ortfo-bin")
provides=("ortfo")
source=("git+${url}")
sha256sums=("SKIP")
pkgver() {
cd gui
git describe --tags --abbrev=0 | sed 's/-/./g'
}
prepare() {
cd gui
git checkout tags/v${pkgver/.alpha/-alpha}
which pnpm || curl -fsSL https://get.pnpm.io/install.sh | PNPM_VERSION=7.0.0-rc.8 sh -
# Install frontend dependencies
pnpm install || yarn install || npm install
# Install the statik tool
go install github.com/rakyll/statik
# Prepare statik content
mkdir -p dist/
statik -f -src=dist/
# Install backend dependencies
go mod tidy
}
build() {
cd gui
make
}
check() {
cd gui
# make test
}
package() {
cd gui
install -Dm 755 ortfo -t "${pkgdir}/usr/bin"
install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}"
install -Dm 644 README.md -t "${pkgdir}/usr/share/doc/${pkgname}"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Medium | 3 |
| 2026-09-16 00:03:17 | Medium | 3 |
| 2026-09-15 00:25:31 | Medium | 3 |
| 2026-09-14 00:27:57 | Medium | 3 |
| 2026-09-13 00:19:54 | Medium | 3 |
| 2026-09-12 00:25:17 | Medium | 3 |
| 2026-09-11 00:19:22 | Medium | 3 |
| 2026-09-10 00:22:44 | Medium | 3 |
| 2026-09-09 00:04:09 | Medium | 3 |
| 2026-09-08 00:18:08 | Medium | 3 |
| 2026-09-07 00:30:15 | Medium | 3 |
| 2026-09-06 00:17:06 | Medium | 3 |
| 2026-09-05 00:16:27 | Medium | 3 |
| 2026-09-04 00:03:13 | Medium | 3 |
| 2026-09-03 00:15:47 | Medium | 3 |
| 2026-09-02 00:02:31 | Medium | 3 |
| 2026-09-01 00:11:19 | Medium | 3 |
| 2026-08-31 00:19:57 | Medium | 3 |
| 2026-08-30 00:04:14 | Medium | 3 |
| 2026-08-29 00:29:17 | Medium | 3 |