kubeless
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:75
KUBECTL_VERSION=$(wget -qO- https://storage.googleapis.com/kubernetes-release/release/stable.txt); \ -
PKGBUILD:76
wget -q -O "${_builddepends_bins_path}/kubectl" https://storage.googleapis.com/kubernetes-release/release/$KUBECTL_VERSION/bin/$(go env GOOS)/$(go env GOARCH)/kubectl; \
llm_review
The static rules flagged this HIGH, but an AI model (anthropic/claude-4.6-sonnet-20260217) reviewed the full PKGBUILD and judged it MEDIUM (confidence 82%): The PKGBUILD downloads two pre-built binaries (kubecfg from ksonnet's GitHub releases and kubectl from Google's official storage) outside of the source=() array during prepare(), meaning they receive no checksum verification. Both sources are legitimate (ksonnet/kubecfg on GitHub, kubectl from storage.googleapis.com/kubernetes-release which is the official Google distribution channel), and the binaries are used only as build-time tools (not installed into the final package). There is no obfuscation, no exfiltration, and no attacker-controlled host. However, fetching and executing unverified binaries during the build is a real security concern: a MITM or a compromised release on those hosts could inject malicious code into the build process. This is sloppy packaging rather than malicious intent, but the risk is real enough to rate medium rather than low, since the unverified binaries are actually executed during the build. The package also uses 'git+' with SKIP checksum and checks out a specific tag, which is acceptable but not ideal.
1 higher static finding superseded - not the current verdict (shown for transparency)
download_then_exec
A file fetched with curl/wget (not part of source=(), so never checksum-verified) is later made executable or run — a fetch-and-execute pattern split across statements.
-
PKGBUILD:73
chmod +x "${_builddepends_bins_path}/kubecfg"; -
PKGBUILD:77
chmod +x "${_builddepends_bins_path}/kubectl";
PKGBUILD
4 offending line(s) highlighted# Maintainer: Stefan Cocora <stefan dot cocora at gmail dot com>
# Contributor:
_pkgauthor=kubeless
_upstream_pkgname=kubeless
pkgname=kubeless
pkgver=1.0.4
pkgrel=1
pkgdesc="A Kubernetes-native serverless framework that lets you deploy small bits of code without having to worry about the underlying infrastructure plumbing."
arch=('x86_64')
groups=()
depends=(
"filesystem"
"glibc"
"iana-etc"
"linux-api-headers"
"tzdata"
)
makedepends=(
"go"
"git"
"wget"
)
_builddepends_bins_path="$HOME/tmp/build/bin"
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=
license=("Apache")
_manifest_non_rbac="${_upstream_pkgname}-non-rbac.yaml"
_manifest_openshift="${_upstream_pkgname}-openshift.yaml"
_manifest_rbac="${_upstream_pkgname}.yaml"
url="https://github.com/${_pkgauthor}/${_upstream_pkgname}"
# https://github.com/kubeless/kubeless/archive/v1.0.0.tar.gz
source=("${pkgname}::git+https://github.com/${_pkgauthor}/${_upstream_pkgname}.git"
"LICENSE::https://raw.githubusercontent.com/${_pkgauthor}/${_upstream_pkgname}/master/LICENSE")
sha256sums=('SKIP'
'fdcee9e38cea79678ee1fa2cb86ce9889eea24899b526911dc982bf4519113b2')
prepare() {
local OP="prepare"
if [ "$PKGBUILD_DEBUG" = "true" ];
then
cd "${srcdir}/${_upstream_pkgname}"
echo "pkgver: $(git describe --long --tags | sed 's/\([^-]*-g\)/r\1/;s/-/./g')"
echo "running function: $OP"
echo "user: $(whoami)"
echo "CWD: $CWD"
echo "PWD: $PWD"
echo "CI: $CI"
echo "PKGBUILD_DEBUG: $PKGBUILD_DEBUG"
echo "BUILDDIR: $BUILDDIR"
echo "PKGDEST: $PKGDEST"
echo "SRCDEST: $SRCDEST"
echo "SRCPKGDEST: $SRCPKGDEST"
echo "LOGDEST: $LOGDEST"
echo "PACKAGER: $PACKAGER"
fi
# https://github.com/kubeless/kubeless/blob/master/Makefile#L104-L113
# have to copy/paste this section because the upstream maintainers are using sudo during this section of the Makefile
mkdir -p "${pkgdir}/usr/local/bin"
mkdir -p ${_builddepends_bins_path}
echo "=== fetching kubecfg"
wget -q -O "${_builddepends_bins_path}/kubecfg" https://github.com/ksonnet/kubecfg/releases/download/v0.9.0/kubecfg-$(go env GOOS)-$(go env GOARCH); \
chmod +x "${_builddepends_bins_path}/kubecfg";
echo "=== fetching kubectl"
KUBECTL_VERSION=$(wget -qO- https://storage.googleapis.com/kubernetes-release/release/stable.txt); \
wget -q -O "${_builddepends_bins_path}/kubectl" https://storage.googleapis.com/kubernetes-release/release/$KUBECTL_VERSION/bin/$(go env GOOS)/$(go env GOARCH)/kubectl; \
chmod +x "${_builddepends_bins_path}/kubectl";
mkdir -p "${srcdir}/gopath/{bin,src,pkg}"
mkdir -p "${srcdir}/gopath/src/github.com/${_pkgauthor}"
cp -r "${srcdir}/${pkgname}" "${srcdir}/gopath/src/github.com/${_pkgauthor}/${pkgname}"
# build from release tag rather than from the master HEAD
cd "${srcdir}/gopath/src/github.com/${_pkgauthor}/${pkgname}" && git checkout "v${pkgver}"
}
build() {
local OP="build"
if [ "$PKGBUILD_DEBUG" = "true" ];
then
echo "running function: $OP"
echo "user: $(whoami)"
echo "CWD: $CWD"
echo "PWD: $PWD"
echo "CI: $CI"
echo "PKGBUILD_DEBUG: $PKGBUILD_DEBUG"
echo "BUILDDIR: $BUILDDIR"
echo "PKGDEST: $PKGDEST"
echo "SRCDEST: $SRCDEST"
echo "SRCPKGDEST: $SRCPKGDEST"
echo "LOGDEST: $LOGDEST"
echo "PACKAGER: $PACKAGER"
fi
export GOPATH="${srcdir}/gopath"
export PATH="${_builddepends_bins_path}:${PATH}"
export CGO_ENABLED=0
cd "${srcdir}/gopath/src/github.com/${_pkgauthor}/${pkgname}"
# https://github.com/kubeless/kubeless/blob/master/.circleci/config.yml#L77-L105
go get -u golang.org/x/lint/golint
make bootstrap
# make VERSION=${CONTROLLER_TAG} binary
make VERSION="${pkgver}" binary
make test
make validation
make all-yaml
mkdir build-manifests
MANIFESTS="kubeless kubeless-non-rbac kubeless-openshift"; \
IFS=' ' read -r -a manifests <<< "$MANIFESTS"; \
for f in "${manifests[@]}"; do \
sed -i.bak 's/:latest/'":${CONTROLLER_TAG}"'/g' ${f}.yaml; \
cp ${f}.yaml build-manifests/; \
done
}
package() {
local OP="package"
if [ "$PKGBUILD_DEBUG" = "true" ];
then
echo "running function: $OP"
echo "user: $(whoami)"
echo "CWD: $CWD"
echo "PWD: $PWD"
echo "CI: $CI"
echo "PKGBUILD_DEBUG: $PKGBUILD_DEBUG"
echo "BUILDDIR: $BUILDDIR"
echo "PKGDEST: $PKGDEST"
echo "SRCDEST: $SRCDEST"
echo "SRCPKGDEST: $SRCPKGDEST"
echo "LOGDEST: $LOGDEST"
echo "PACKAGER: $PACKAGER"
fi
install -Dm755 "${srcdir}/gopath/bin/${pkgname}" "${pkgdir}/usr/bin/${pkgname}"
mkdir -p "${pkgdir}/usr/share/licenses/${_upstream_pkgname}"
cp "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/${_upstream_pkgname}"
mkdir -p "${pkgdir}/usr/share/${_upstream_pkgname}/manifests"
cp "${srcdir}/gopath/src/github.com/${pkgname}/${_pkgauthor}/build-manifests/${_manifest_non_rbac}" "${pkgdir}/usr/share/${_upstream_pkgname}/manifests/"
cp "${srcdir}/gopath/src/github.com/${pkgname}/${_pkgauthor}/build-manifests/${_manifest_openshift}" "${pkgdir}/usr/share/${_upstream_pkgname}/manifests/"
cp "${srcdir}/gopath/src/github.com/${pkgname}/${_pkgauthor}/build-manifests/${_manifest_rbac}" "${pkgdir}/usr/share/${_upstream_pkgname}/manifests/"
chmod 644 "${pkgdir}/usr/share/${_upstream_pkgname}/manifests/"*.yaml
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | MEDIUM | 3 |
| 2026-08-02 00:16:08 | MEDIUM | 3 |
| 2026-08-01 00:11:18 | MEDIUM | 3 |
| 2026-07-31 00:14:10 | MEDIUM | 3 |
| 2026-07-30 00:17:23 | MEDIUM | 3 |
| 2026-07-29 00:25:53 | MEDIUM | 3 |
| 2026-07-28 00:07:28 | MEDIUM | 3 |
| 2026-07-27 00:24:32 | MEDIUM | 3 |
| 2026-07-26 00:07:32 | MEDIUM | 3 |
| 2026-07-25 00:13:44 | MEDIUM | 3 |
| 2026-07-24 00:02:28 | MEDIUM | 3 |
| 2026-07-23 00:14:47 | MEDIUM | 3 |
| 2026-07-22 00:29:32 | MEDIUM | 3 |
| 2026-07-21 00:24:15 | MEDIUM | 3 |
| 2026-07-20 00:19:49 | MEDIUM | 3 |
| 2026-07-19 00:17:08 | MEDIUM | 3 |
| 2026-07-18 00:14:48 | MEDIUM | 3 |
| 2026-07-17 00:06:16 | MEDIUM | 3 |
| 2026-07-16 00:05:41 | MEDIUM | 3 |
| 2026-07-15 00:09:25 | MEDIUM | 3 |