synergy3-beta-bin
The package downloads a prebuilt binary from a non-whitelisted host using a token-gated process, which creates an unverifiable supply chain; if the host were compromised, an attacker could silently replace the binary.
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:35
curl -fsSL -o "${srcdir}/${_pkgfile}" "https://symless.com/synergy/api/download/${_pkgfile}?token=${token}"
llm_review
An AI model (qwen/qwen3-235b-a22b-07-25) reviewed this and agrees it is MEDIUM (confidence 95%): The package downloads a prebuilt binary from a non-whitelisted host using a token-gated process, which creates an unverifiable supply chain; if the host were compromised, an attacker could silently replace the binary.
PKGBUILD
1 offending line(s) highlighted# Maintainers: thadah
pkgname="synergy3-beta-bin"
pkgver="3.7.0"
pkgrel="1"
pkgdesc="Share a single mouse and keyboard between multiple computers"
url="https://symless.com/synergy"
license=('custom:Proprietary')
arch=("x86_64")
source=()
sha256sums=()
conflicts=('synergy' 'synergy1-bin' 'synergy-git' 'synergy-1.6' 'synergy2-bin' 'synergy3-bin' 'synergy3-beta-bin')
depends=('openssl' 'alsa-lib' 'libei' 'libnotify' 'nss' 'qt6-base' 'libxkbfile' 'libxtst' 'libappindicator-gtk3' 'libayatana-appindicator')
optdepends=('pugixml')
options=("!strip")
install="${pkgname}.install"
# Anonymous download permalink provided by Symless
_permalink="https://email.mg.symless.com/c/eJxMjj1PwzAUAH-Ns1HZ7zn-GDw0gggJECBRqXSzXqw2JbEj2xTCr0d0Yry75QYHPgjTBCe0EdAqbXRzcgSDIkNGWC-EFzRwoFaRJm81tzo0owMOiisB3CJyvbHEEbHVEAhRKmSSz8dNWecplLKhNDeTO9W6FIZbBj2D_l-7Ugz5uDLo_TIy6If0Fafkhz9BFEph2Nf0ESLDW3l4PEO8ed6_bA_nRcLr2hHa9odqd6fu3_P-8-nte_fQiXbXZHcJMWWDRgKT3Gdf8xivQxcHvwEAAP__hk5M-A"
_pkgfile="synergy-${pkgver}-beta-linux-noble-x86_64.pkg.tar.zst"
prepare() {
curl -fsSL -c "${srcdir}/cookies.txt" -o /dev/null "$_permalink"
curl -fsSL -b "${srcdir}/cookies.txt" -o "${srcdir}/page.html" \
"https://symless.com/synergy/download/package/synergy-personal-v3/arch-linux/${_pkgfile}"
local token
token=$(grep -oP '(?<=\\"token\\":\\")[^\\"]+' "${srcdir}/page.html" | head -n1)
if [[ -z "$token" ]]; then
echo "Failed to get download token."
return 1
fi
echo "Downloading .pkg.tar.zst file with permalink token..."
curl -fsSL -o "${srcdir}/${_pkgfile}" "https://symless.com/synergy/api/download/${_pkgfile}?token=${token}"
}
package() {
# Extract the .tar.zst file keeping permissions
bsdtar -xpf "${srcdir}/${_pkgfile}" -C "${pkgdir}/" opt usr
install -d "${pkgdir}/usr/bin"
ln -s /opt/Synergy/synergy "${pkgdir}/usr/bin/synergy"
ln -s /opt/Synergy/synergy-core "${pkgdir}/usr/bin/synergy-core"
# Install the user service and enable it.
install -Dm644 "${pkgdir}/opt/Synergy/resources/services/global/synergy.service" "${pkgdir}/etc/systemd/user/synergy.service"
install -d "${pkgdir}/etc/systemd/user/graphical-session.target.wants"
ln -s /etc/systemd/user/synergy.service "${pkgdir}/etc/systemd/user/graphical-session.target.wants/synergy.service"
# Install the login service into the system unit directory (disabled).
install -Dm644 "${pkgdir}/opt/Synergy/resources/services/system/synergy.service" "${pkgdir}/usr/lib/systemd/system/synergy.service"
# Add the loginInfo file
install -d "${pkgdir}/etc/Synergy"
install -m666 /dev/null "${pkgdir}/etc/Synergy/loginInfo"
chmod 4755 "${pkgdir}/opt/Synergy/chrome-sandbox" || true
}
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 |