cnkiexpress
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:22
source=("https://download.cnki.net/cnkiexpress/cnkiexpress_${pkgver}_amd64.deb")
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 75%): The PKGBUILD downloads a prebuilt .deb from download.cnki.net (the official CNKI/China National Knowledge Infrastructure distribution host, matching the stated url cajviewer.cnki.net), extracts it, then executes the embedded AppImage binary (chmod +x and ./${_pkgname}.AppImage --appimage-extract) at build time. The sha256sum is pinned, which mitigates silent substitution risk somewhat. However: (1) the binary is executed during the build phase, not just installed; (2) download.cnki.net is a vendor-controlled host but not a widely audited/mirrored source; (3) the AppImage is a closed-source Electron app from a Chinese state-affiliated academic publisher with no reproducibility guarantees. This is a classic medium-risk pattern: a prebuilt, executed binary from a single vendor host with a pinned checksum but no source build. The cheaper model's MEDIUM rating is correct — this is not a false positive, but it is also not clearly malicious.
PKGBUILD
1 offending line(s) highlighted# Maintainer: fansuregrin <quarlong@qq.com>
pkgname=cnkiexpress
_pkgname=$pkgname
pkgver=0.1.22
pkgrel=2
pkgdesc="A software for academic research articles developed by CNKI"
arch=("x86_64")
url="https://cajviewer.cnki.net"
license=('custom')
depends=('hicolor-icon-theme'
'gtk3'
'libnotify'
'nss'
'libxss'
'libxtst'
'xdg-utils'
'at-spi2-core'
'util-linux-libs'
'libappindicator-gtk3'
'libsecret')
makedepends=('sed' 'tar')
source=("https://download.cnki.net/cnkiexpress/cnkiexpress_${pkgver}_amd64.deb")
sha256sums=('e402f22c9e005882b2e97fe1622a8dead7dd82766055f1c073ce023ca2ef877f')
options=(!strip)
prepare() {
tar -xJf data.tar.xz
cd ${srcdir}/opt/${_pkgname}
# making .AppImage file executable
chmod -v +x ${_pkgname}.AppImage
# extract .AppImage file
./${_pkgname}.AppImage --appimage-extract
}
build() {
cd ${srcdir}/opt/${_pkgname}
# modifying .desktop file
sed -i -E "s|Exec=AppRun|Exec=/usr/bin/${_pkgname}|" squashfs-root/${_pkgname}.desktop
sed -i "s/Name/Name[zh_CN]/g" squashfs-root/${_pkgname}.desktop
sed -i "/Name/i\Name=CNKI Express" squashfs-root/${_pkgname}.desktop
}
package() {
cd ${srcdir}
# Copy app files
install -vdm 755 ${pkgdir}/opt/${_pkgname}/
cp -va opt/${_pkgname}/squashfs-root/* ${pkgdir}/opt/${_pkgname}
# Fix permissions
for d in locales resources Resource; do
chmod -v 755 ${pkgdir}/opt/${_pkgname}/${d}
find ${pkgdir}/opt/${_pkgname}/${d} -type d -exec chmod -v 755 {} +
done
chown root:root ${pkgdir}/opt/${_pkgname}/chrome-sandbox
chmod 4755 ${pkgdir}/opt/${_pkgname}/chrome-sandbox
# Install mime file
install -vDm 644 usr/share/mime/packages/${_pkgname}.xml -t ${pkgdir}/usr/share/mime/packages
# Link entry point
install -vdm 755 ${pkgdir}/usr/bin/
ln -vsf /opt/${_pkgname}/${_pkgname} ${pkgdir}/usr/bin/${_pkgname}
# Install LICENSE file
install -Dm644 ${pkgdir}/opt/${_pkgname}/license.txt -t ${pkgdir}/usr/share/licenses/${_pkgname}
# Copy icons files
install -vdm 755 ${pkgdir}/usr/share/icons/
find usr/share/icons -type d -exec chmod -v 755 {} +
cp -va usr/share/icons/* ${pkgdir}/usr/share/icons/
# Copy desktop file
install -vDm 644 opt/${_pkgname}/squashfs-root/${_pkgname}.desktop ${pkgdir}/usr/share/applications/${_pkgname}.desktop
# Remove unused files
rm -vrf ${pkgdir}/opt/${_pkgname}/{usr,swiftshader,AppRun,${pkgname}.{desktop,png}}
}
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 |