ripcord-arch-libs

maintainer txtsd · 11 votes · scanned 2026-08-03 00:08:14.047287
MEDIUM
View on AUR ↗
Why flagged The PKGBUILD downloads a prebuilt proprietary AppImage binary from cancel.fm (the official Ripcord vendor site) and executes it to extract its contents. cancel.fm is the legitimate upstream host for Ripcord, so this is not an unofficial or personal host — it is the vendor's own distribution channel. The download is verified with a PGP signature against a pinned key (validpgpkeys) and a sha256sum, which provides reasonable integrity assurance. However, the core concern remains: this is a closed-source, prebuilt binary from a proprietary vendor that gets extracted and installed as executable code, with no ability to audit what it does. Additionally, a compiled shared library (hook.so) built from a third-party GitHub repo (geniiii/ripcord-audio-hook) is injected via LD_PRELOAD into the application at runtime, which is a meaningful supply-chain vector — any compromise of that repo would result in arbitrary code execution in the context of the Ripcord process. The combination of an unauditable proprietary binary plus an LD_PRELOAD hook from a separate personal GitHub repo keeps this at medium rather than clean, though neither element is clearly malicious.

Triggered rules

MEDIUM source=() URL on a non-standard host 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:33 "https://cancel.fm/dl/${_file}"{,.asc}
MEDIUM AI review 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 proprietary AppImage binary from cancel.fm (the official Ripcord vendor site) and executes it to extract its contents. cancel.fm is the legitimate upstream host for Ripcord, so this is not an unofficial or personal host — it is the vendor's own distribution channel. The download is verified with a PGP signature against a pinned key (validpgpkeys) and a sha256sum, which provides reasonable integrity assurance. However, the core concern remains: this is a closed-source, prebuilt binary from a proprietary vendor that gets extracted and installed as executable code, with no ability to audit what it does. Additionally, a compiled shared library (hook.so) built from a third-party GitHub repo (geniiii/ripcord-audio-hook) is injected via LD_PRELOAD into the application at runtime, which is a meaningful supply-chain vector — any compromise of that repo would result in arbitrary code execution in the context of the Ripcord process. The combination of an unauditable proprietary binary plus an LD_PRELOAD hook from a separate personal GitHub repo keeps this at medium rather than clean, though neither element is clearly malicious.

PKGBUILD

1 offending line(s) highlighted
1# Maintainer: txtsd <aur.archlinux@ihavea.quest>
2# Contributor: nissen22 <bernhardnorneslotsberg at gmail dot com>
3
4pkgname=ripcord-arch-libs
5pkgver=0.4.29
6pkgrel=5
7pkgdesc='Qt-based Discord and Slack client. Modified to run on system libraries for Wayland support.'
8arch=(x86_64)
9url='https://cancel.fm/ripcord/'
10license=('LicenseRef-ripcord')
11depends=(
12 # libsodium
13 funchook
14 gcc-libs
15 glibc
16 libgl
17 libx11
18 libxss
19 opus
20 qt5-base
21 qt5-imageformats
22 qt5-multimedia
23 qt5-svg
24 qt5-websockets
25 zlib
26)
27makedepends=(git)
28provides=(ripcord)
29conflicts=(ripcord)
30options=(!strip)
31_file="Ripcord-${pkgver}-x86_64.AppImage"
32source=(
33 "https://cancel.fm/dl/${_file}"{,.asc}
34 'git+https://github.com/geniiii/ripcord-audio-hook#branch=linux'
35 LICENSE
36)
37sha256sums=('e320cb3c4043b0f296b4bc1da664b29776f95c2c0b02bdbf115b4d46b1669899'
38 'SKIP'
39 'SKIP'
40 'd7b2d483acceaebebfa068223efd8fb5e0f5d66f642fa234484ca50974c9fa2c')
41validpgpkeys=('ABBAD1CB484F53024CF5868B69332F9203F21F5C')
42
43prepare() {
44 chmod +x "${_file}"
45 "./${_file}" --appimage-extract &> /dev/null
46}
47
48build() {
49 cd ripcord-audio-hook
50
51 gcc -shared -fPIC -o hook.so hook.c -ldl -lfunchook
52}
53
54package() {
55 # Directories
56 install -Dm755 squashfs-root/lib/libsodium.so.18 -t "${pkgdir}/usr/lib/ripcord/lib"
57 rm -rf squashfs-root/lib
58 rm -rf squashfs-root/plugins
59 install -dm755 "${pkgdir}/usr/bin/"
60 install -dm755 "${pkgdir}/usr/lib/ripcord/"
61 install -dm755 "${pkgdir}/usr/share/applications/"
62 install -dm755 "${pkgdir}/usr/share/icons/"
63 install -dm755 "${pkgdir}/usr/share/licenses/${pkgname}"
64
65 # Icon
66 install -Dm644 squashfs-root/Ripcord_Icon.png "${pkgdir}/usr/share/icons/"
67
68 # .desktop file
69 sed -i 's/Exec=Ripcord/Exec=env\ LD_PRELOAD=\/usr\/lib\/ripcord\/hook\.so QT_QPA_PLATFORM_PLUGIN_PATH=\/usr\/lib\/qt\/plugins\ ripcord/g' squashfs-root/Ripcord.desktop
70 install -Dm644 squashfs-root/Ripcord.desktop -t "${pkgdir}"/usr/share/applications
71
72 # License
73 install -Dm644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}"
74
75 # Application
76 chmod 755 -R squashfs-root
77 mv squashfs-root/* "${pkgdir}/usr/lib/ripcord/"
78 ln -s /usr/lib/ripcord/lib/libsodium.so.18 "${pkgdir}/usr/lib/libsodium.so.18"
79 ln -s /usr/lib/ripcord/Ripcord "${pkgdir}/usr/bin/ripcord"
80
81 # Hook
82 install -Dm755 ripcord-audio-hook/hook.so -t "${pkgdir}/usr/lib/ripcord/"
83}
84

Scan history

Scanned at (UTC)SeverityRules
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

Report a package

Reports go to the AURWatch maintainer (one person) and are read by hand. No login required.

0 / 4000
Your suggestion