pulse-secure
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:14
source_x86_64=("https://dl.vpn.ucsb.edu/clients/Linux%20VPN%20Client/ps-pulse-linux-22.8r5-b41063-installer.rpm")
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 RPM binary installer from dl.vpn.ucsb.edu (University of California Santa Barbara's VPN distribution server), which is an institutional mirror rather than the official Ivanti/Pulse Secure vendor domain (pulsesecure.net or ivanti.com). While this is a plausible legitimate university VPN deployment scenario (universities commonly host their own VPN client builds, sometimes customized), it still represents a real supply-chain concern: the binary is executed/installed directly, the host is not the upstream vendor, and if the university server were compromised the md5sum (already a weak hash) would be the only protection. Additionally, DLAGENTS uses curl with -k (disabling TLS certificate verification), which removes transport-layer protection entirely and means a MITM could substitute the binary. The combination of: non-vendor binary host + TLS verification disabled + weak MD5 integrity check + directly installed native binaries constitutes a genuine medium-severity supply-chain risk, not a false positive.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Chiwan Park <chiwanpark@hotmail.com>
DLAGENTS=("https::/usr/bin/curl -k -o %o %u")
pkgname=pulse-secure
pkgver=22.8r5_b41063
pkgrel=2
pkgdesc='Ivanti Secure Access Client'
arch=(x86_64)
license=(custom)
url='https://www.pulsesecure.net/'
depends=(gcc-libs libsecret openssl curl dbus libbsd dmidecode patch)
install=${pkgname}.install
source=("EULA.txt")
source_x86_64=("https://dl.vpn.ucsb.edu/clients/Linux%20VPN%20Client/ps-pulse-linux-22.8r5-b41063-installer.rpm")
md5sums=('261848a28201e5386ec4bf587473a48b')
md5sums_x86_64=('93a073f8ff0f30d71bb603388dadb417')
optdepends=('psmisc: for pulsesvc -K', 'gtkmm3: for pulseUi', 'webkit2gtk: for pulseUi')
conflicts=(pulse-connect-secure)
options=(!strip)
package() {
install -Dm644 EULA.txt "$pkgdir"/usr/share/licenses/$pkgname/EULA.txt
for d in $(find opt/pulsesecure -type d); do
install -dm755 "$d" "$pkgdir"/"$d";
done
for f in $(find opt/pulsesecure/bin -type f); do
install -Dm755 "$f" "$pkgdir"/"$f";
done
for f in $(find opt/pulsesecure/lib -type f); do
install -Dm755 "$f" "$pkgdir"/"$f";
done
for f in $(find opt/pulsesecure/resource -type f); do
install -Dm644 "$f" "$pkgdir"/"$f";
done
install -Dm644 usr/share/man/man1/pulse.1.gz "$pkgdir"/usr/share/man/man1/pulse.1.gz
# we move service unit file to /usr/lib/systemd/system due to pacman limitation
install -Dm644 lib/systemd/system/pulsesecure.service "$pkgdir"/usr/lib/systemd/system/pulsesecure.service
mkdir -p "$pkgdir"/usr/share/applications/ "$pkgdir"/usr/share/dbus-1/system.d/ "$pkgdir"/opt/pulsesecure/lib/JUNS/interfaces
mkdir -p "$pkgdir"/var/lib/pulsesecure/pulse
ln -s /opt/pulsesecure/resource/pulse.desktop "$pkgdir"/usr/share/applications/pulse.desktop
ln -s /opt/pulsesecure/lib/JUNS/net.psecure.pulse.conf "$pkgdir"/usr/share/dbus-1/system.d/net.psecure.pulse.conf
mkdir -p "$pkgdir"/etc/pki/ca-trust/extracted/openssl
ln -sf /etc/ca-certificates/extracted/ca-bundle.trust.crt "$pkgdir"/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
for f in $(find opt/pulsesecure/lib/JUNS/interfaces -type l); do
ln -s $(readlink $f) "$pkgdir"/"$f" ;
done
}
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 |