openxr-layer-ultraleap
Triggered rules
source_untrusted_domain
One or more source=() URLs point to a host outside the trusted allowlist (github.com, gitlab.com, codeberg.org, pypi.org, …).
-
PKGBUILD:25
source=("https://repo.ultraleap.com/apt/pool/main/o/${pkgname}/${pkgname}_${pkgver}%2b${commit}.CI${ci}_amd64.deb"
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): The PKGBUILD downloads a prebuilt binary .deb (containing a shared library libUltraleapHandTracking.so) from repo.ultraleap.com, which is Ultraleap's own official Debian/Ubuntu package repository — a plausible and legitimate vendor host. The library is installed as a non-executable shared object (m644), not directly executed during the build, but it will be loaded at runtime by OpenXR applications, making it effectively executed code. The integrity check uses only MD5, which is cryptographically weak and provides minimal supply-chain assurance. There is no GPG signature verification (validpgpkeys is empty). The prepare() function extracts data.tar.gz from the .deb without verifying the control archive, which is standard .deb unpacking but means the checksum only covers the outer .deb. Overall: the source host is plausibly official, the pattern (repackaging a vendor .deb) is common in AUR, but the binary nature of the payload combined with weak integrity checking (MD5 only, no PGP) represents a genuine medium supply-chain concern — if the upstream host were compromised or the file swapped, there is no strong verification. This is a real medium, not a false positive.
PKGBUILD
1 offending line(s) highlighted# Originally: Ultraleap <info@ultraleap.com>
# Maintainer: Sam Bilbow <samuel.bilbow@icloud.com>
pkgname=openxr-layer-ultraleap
pkgver=1.6.5
commit=2486adf9
ci=1130164
pkgrel=2
epoch=
pkgdesc="Ultraleap OpenXR Hand Tracking API Layer. Enables Ultraleap hand-tracking on an existing OpenXR runtime"
arch=('x86_64')
url="https://www.ultraleap.com/"
license=('PROPRIETARY')
groups=('ultraleap-hand-tracking')
depends=('ultraleap-hand-tracking-service')
makedepends=()
checkdepends=()
optdepends=()
provides=('openxr-layer-ultraleap')
conflicts=()
replaces=()
backup=()
options=()
install='openxr-layer-ultraleap.install'
changelog=
source=("https://repo.ultraleap.com/apt/pool/main/o/${pkgname}/${pkgname}_${pkgver}%2b${commit}.CI${ci}_amd64.deb"
'openxr-layer-ultraleap.conf')
noextract=()
md5sums=('403fbbadf31bd306a0edac498b327ab1'
'378b1c86a576dc5ad4a6498e95d6925d')
validpgpkeys=()
prepare() {
tar xzf "data.tar.gz"
}
package() {
install -D -m644 "${srcdir}/usr/lib/${pkgname}/libUltraleapHandTracking.so.1.6.5.0" "${pkgdir}/usr/lib/${pkgname}/libUltraleapHandTracking.so.1.6.5.0"
install -D -m644 "${srcdir}/usr/share/openxr/1/api_layers/implicit.d/XrApiLayer_Ultraleap.json" "${pkgdir}/usr/share/openxr/1/api_layers/implicit.d/XrApiLayer_Ultraleap.json"
install -D -m644 "${srcdir}/openxr-layer-ultraleap.conf" "${pkgdir}/etc/ld.so.conf.d/openxr-layer-ultraleap.conf"
# doc
install -D -m644 "${srcdir}/usr/share/doc/openxr-layer-ultraleap/copyright" "${pkgdir}/usr/share/doc/openxr-layer-ultraleap/copyright"
install -D -m644 "${srcdir}/usr/share/doc/openxr-layer-ultraleap/LICENSE.md" "${pkgdir}/usr/share/doc/openxr-layer-ultraleap/LICENSE.md"
install -D -m644 "${srcdir}/usr/share/doc/openxr-layer-ultraleap/NEWS.gz" "${pkgdir}/usr/share/doc/openxr-layer-ultraleap/NEWS.gz"
install -D -m644 "${srcdir}/usr/share/doc/openxr-layer-ultraleap/NOTICES.md" "${pkgdir}/usr/share/doc/openxr-layer-ultraleap/NOTICES.md"
install -D -m644 "${srcdir}/usr/share/doc/openxr-layer-ultraleap/README.md" "${pkgdir}/usr/share/doc/openxr-layer-ultraleap/README.md"
}
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 |