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-09-17 00:27:14 | Medium | 2 |
| 2026-09-16 00:03:17 | Medium | 2 |
| 2026-09-15 00:25:31 | Medium | 2 |
| 2026-09-14 00:27:57 | Medium | 2 |
| 2026-09-13 00:19:54 | Medium | 2 |
| 2026-09-12 00:25:17 | Medium | 2 |
| 2026-09-11 00:19:22 | Medium | 2 |
| 2026-09-10 00:22:44 | Medium | 2 |
| 2026-09-09 00:04:09 | Medium | 2 |
| 2026-09-08 00:18:08 | Medium | 2 |
| 2026-09-07 00:30:15 | Medium | 2 |
| 2026-09-06 00:17:06 | Medium | 2 |
| 2026-09-05 00:16:27 | Medium | 2 |
| 2026-09-04 00:03:13 | Medium | 2 |
| 2026-09-03 00:15:47 | Medium | 2 |
| 2026-09-02 00:02:31 | Medium | 2 |
| 2026-09-01 00:11:19 | Medium | 2 |
| 2026-08-31 00:19:57 | Medium | 2 |
| 2026-08-30 00:04:14 | Medium | 2 |
| 2026-08-29 00:29:17 | Medium | 2 |