airsend-desktop
A prebuilt binary .deb is downloaded from patch.codelathe.com, which is a subdomain of codelathe.com — the company behind AirSend/CodeLathe. This is plausibly the official vendor distribution host, not a random personal server. However, several concerns remain: (1) the source URL points to a mutable, unversioned path ('AirSend-Setup.deb') rather than a versioned artifact, meaning the file can be silently replaced at any time without changing the URL; (2) the sha256sum provides a point-in-time integrity check but cannot protect against future substitution since the URL is not pinned to a specific version; (3) the package() function extracts and installs a prebuilt binary directly into pkgdir without any inspection or sandboxing — whatever is in the .deb is executed as root during install; (4) the bsdtar call operates on 'data.tar.xz' without first extracting it from the .deb, suggesting the build may be broken or relies on a prepare() step that is missing. The combination of a mutable binary URL and direct installation of an opaque prebuilt binary from a non-standard (even if plausibly official) host constitutes a genuine medium-severity supply-chain concern.
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:12
source=("https://patch.codelathe.com/airsend/live/installer/linux/AirSend-Setup.deb")
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): A prebuilt binary .deb is downloaded from patch.codelathe.com, which is a subdomain of codelathe.com — the company behind AirSend/CodeLathe. This is plausibly the official vendor distribution host, not a random personal server. However, several concerns remain: (1) the source URL points to a mutable, unversioned path ('AirSend-Setup.deb') rather than a versioned artifact, meaning the file can be silently replaced at any time without changing the URL; (2) the sha256sum provides a point-in-time integrity check but cannot protect against future substitution since the URL is not pinned to a specific version; (3) the package() function extracts and installs a prebuilt binary directly into pkgdir without any inspection or sandboxing — whatever is in the .deb is executed as root during install; (4) the bsdtar call operates on 'data.tar.xz' without first extracting it from the .deb, suggesting the build may be broken or relies on a prepare() step that is missing. The combination of a mutable binary URL and direct installation of an opaque prebuilt binary from a non-standard (even if plausibly official) host constitutes a genuine medium-severity supply-chain concern.
PKGBUILD
1 offending line(s) highlighted# Maintainer: WhriedPlanck
pkgname=airsend-desktop
pkgver=1.9.78
pkgrel=1
pkgdesc="Simple Communication and Collaboration with clients, team members or anyone to get work done"
arch=('x86_64')
url="https://www.airsend.io/"
license=('custom')
depends=('libxss' 'gtk3' 'nss')
provides=('airsend')
source=("https://patch.codelathe.com/airsend/live/installer/linux/AirSend-Setup.deb")
sha256sums=('905c79ccad7b8f365a922bbe54782245d4c994bed486c4f326cb5032315ad64c')
package() {
bsdtar -xf data.tar.xz -C "$pkgdir"
cd "${pkgdir}"
#install -Dm644 "${srcdir}"/LICENSE usr/share/licenses/electron-lark-bin/LICENSE
#chmod 755 opt/
#chmod 755 usr/
#chmod 755 usr/share/
#chmod 755 usr/share/applications/
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-11-01 00:21:48 | Medium | 2 |
| 2026-10-31 00:07:41 | Medium | 2 |
| 2026-10-30 00:29:30 | Medium | 2 |
| 2026-10-29 00:13:55 | Medium | 2 |
| 2026-10-28 00:06:54 | Medium | 2 |
| 2026-10-27 00:23:28 | Medium | 2 |
| 2026-10-26 00:12:40 | Medium | 2 |
| 2026-10-25 00:20:48 | Medium | 2 |
| 2026-10-24 00:14:55 | Medium | 2 |
| 2026-10-23 00:02:19 | Medium | 2 |
| 2026-10-22 00:13:10 | Medium | 2 |
| 2026-10-21 00:12:50 | Medium | 2 |
| 2026-10-20 00:10:31 | Medium | 2 |
| 2026-10-19 00:03:55 | Medium | 2 |
| 2026-10-18 00:06:55 | Medium | 2 |
| 2026-10-17 00:21:55 | Medium | 2 |
| 2026-10-16 00:12:47 | Medium | 2 |
| 2026-10-15 00:28:05 | Medium | 2 |
| 2026-10-14 00:06:47 | Medium | 2 |
| 2026-10-13 00:23:45 | Medium | 2 |