zedle
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:15
curl 'https://client.primx.eu/PublicSoftware/zedlimitededition/' -X POST \
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:10
source=('https://client.primx.eu/Legal/Terms')
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 85%): The PKGBUILD downloads a prebuilt binary .deb package via a POST request to client.primx.eu in the prepare() phase, outside the source=() array, meaning makepkg's integrity verification does not cover it. The sha256sum check in check() uses a hardcoded hash, but this is a manual check that runs after the binary is already extracted and could be bypassed or differ between builds. The host (client.primx.eu) appears to be the vendor's own distribution server (primx.eu is the official PRIMX vendor site), so this is not a random personal host — it is the official vendor portal. However, the pattern of downloading an executed binary outside source=() with no reproducible, verifiable source URL is a genuine supply-chain concern: the downloaded binary cannot be audited by makepkg, the POST request means the server can return different content at any time, and the hardcoded hash in check() is the only integrity gate. This is a real medium-severity packaging concern (unofficial/unverifiable binary download path) rather than a clear attack, but it is not merely sloppy — it installs a prebuilt proprietary binary that executes on the user's system with no standard integrity guarantee.
PKGBUILD
2 offending line(s) highlightedpkgname=zedle
pkgver=2025.1.14
pkgrel=2
pkgdesc="A graphical interface to create, read and modify encrypted Zed! containers."
arch=('x86_64')
url="https://www.primx.eu"
license=('custom')
depends=('libxslt' 'libxml2-legacy' 'qt5-base' 'hicolor-icon-theme' 'icu')
makedepends=('curl' 'unzip' 'coreutils')
source=('https://client.primx.eu/Legal/Terms')
sha256sums=('c4c7a856f63bf1849faa931919f70ec7649599a55c113b01819258b01dbd09ce')
prepare() {
# No deeplink available, need to submit the form on the website
curl 'https://client.primx.eu/PublicSoftware/zedlimitededition/' -X POST \
--data-raw "Version=$pkgver-Linux+Ubuntu-x64" --output "${pkgname^^}.zip"
unzip -p "${pkgname^^}.zip" "Ubuntu 24.04/${pkgname^^}-$pkgver.Ubuntu24.04.amd64.deb" > "${pkgname^^}.deb"
sha256sum "${pkgname^^}.deb"
rm "${pkgname^^}.zip"
}
package() {
ar x "${pkgname^^}.deb"
tar -xvf data.tar.zst -C "$pkgdir"
# Change directory permissions from 775 to 755
chmod 755 -R "$pkgdir/usr"
install -dm1777 "$pkgdir/etc/primx/accessfiles"
install -dm1777 "$pkgdir/var/log/zed"
touch "$pkgdir/etc/primx/users.registry"
chmod 666 "$pkgdir/etc/primx/users.registry"
install -Dm644 "$srcdir/Terms" -t "$pkgdir/usr/share/licenses/$pkgname/Terms.html"
}
check() {
# SHA verification needs to be done manually because the file is downloaded manually as well
SHA_SUM=feeb57991df2bccff818cf6dfafa4a679dd51ca8ba983ea9b79964a6a82c4283
echo "$SHA_SUM ${pkgname^^}.deb" | sha256sum --check --status
}
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 |