hexcore-link
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://pub-0ff293aefb644607ac910219d9762b50.r2.dev/HexcoreLink_${pkgver}_x64.tar.gz"
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 x86_64 binary tarball from a Cloudflare R2 bucket (pub-0ff293aefb644607ac910219d9762b50.r2.dev) which is a personal/vendor-controlled cloud storage bucket rather than an official distribution channel like GitHub releases or the vendor's own infrastructure. The binary is an Electron app (evidenced by the Chromium/Electron license files) that gets installed and executed directly. While sha256sums are provided (mitigating substitution attacks at build time), the source is not a recognized official release host — it's a Cloudflare R2 bucket that could be controlled by anyone. The official URL is hexcore.xyz but the binary comes from an R2 bucket with an opaque ID. This is a genuine medium-severity supply-chain concern: a prebuilt executable from a non-canonical host with no reproducibility guarantee, though the checksum does provide some protection against in-transit tampering. The risk is that the bucket owner could rotate the file at a new version bump without any source code audit trail.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Nick Haghiri <nshaghiri+aur [at] gmail [dot] com>
pkgname=hexcore-link
pkgver=2.5.9
pkgrel=7
pkgdesc="Hexcore Link for ANNE PRO 2D and other keyboards (firmware > 3.0)"
arch=('x86_64')
url="https://www.hexcore.xyz/hexcore-link"
license=('custom')
depends=('desktop-file-utils' 'hicolor-icon-theme' 'libappindicator-gtk3' 'libnotify' 'libxss' 'libxtst' 'nss' 'libxkbcommon-x11')
options=('!strip' '!emptydirs')
install=${pkgname}.install
source_x86_64=("https://pub-0ff293aefb644607ac910219d9762b50.r2.dev/HexcoreLink_${pkgver}_x64.tar.gz"
"deb_extra_files_hexcore.tar.gz"
"70-hexcore-link.rules")
sha256sums_x86_64=('726f2062d2446d2101e6b2eec5e95d186c1a0a15e21ede69e5ff573ec30d24e9'
'94e4942cc7408feb419e76aa2867e50bdf2bedefd734eb367286b5a7844d2c46'
'2aaca45668bc444b166f4aa3639df24c4dbbe843486221172010062abd9a0b0c')
package() {
install -d "${pkgdir}/opt/${pkgname}"
install -d "${pkgdir}/usr/bin"
cp -rt "${pkgdir}/opt/${pkgname}" "${srcdir}/HexcoreLink_${pkgver}_x64/"*
if [ -d "${srcdir}/usr" ]; then
install -d "${pkgdir}/usr"
cp -rt "${pkgdir}/usr" "${srcdir}/usr/"*
fi
# Fix: Reverting Exec path to the absolute path in /opt
sed -i "s|Exec=.*|Exec=/opt/${pkgname}/${pkgname} %U|" "${pkgdir}/usr/share/applications/hexcore-link.desktop"
# Create symlink for terminal use
ln -sf "/opt/${pkgname}/${pkgname}" "${pkgdir}/usr/bin/${pkgname}"
# Install the new Udev Rules for keyboard detection
install -Dm644 "${srcdir}/70-hexcore-link.rules" "${pkgdir}/usr/lib/udev/rules.d/70-${pkgname}.rules"
chmod 755 "${pkgdir}/opt/${pkgname}/${pkgname}"
install -Dm644 "${pkgdir}/opt/${pkgname}/LICENSES.chromium.html" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE-CHROMIUM"
install -Dm644 "${pkgdir}/opt/${pkgname}/LICENSE.electron.txt" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE-ELECTRON"
}
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 |