cmd-markdown
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_x86_64=("${pkgname}_x86_64_${pkgver}.zip::https://client.zybuluo.com/cmd_linux64_v3.zip")
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): This PKGBUILD downloads prebuilt x86_64/i686 binaries (a NW.js/Electron-based Markdown editor) from client.zybuluo.com, which is the vendor's own download subdomain (zybuluo.com is the official site for Cmd Markdown). The sha256sums are pinned, which mitigates tampering in transit. However, the host is not a well-known distribution channel (e.g., GitHub releases), the binaries are closed-source and prebuilt, and the package installs an executable binary directly to /opt. The supply-chain risk is real but not elevated beyond a typical proprietary prebuilt package: if the vendor's server is compromised or the vendor is malicious, users get arbitrary code execution. The sha256 pinning provides some protection against in-transit substitution but not against the vendor shipping malicious binaries. This is a standard medium-risk pattern for prebuilt proprietary software from a vendor-controlled but non-mainstream host.
PKGBUILD
1 offending line(s) highlighted# Maintainer: witt <1989161762 at qq dot com>
pkgname=cmd-markdown
pkgver=3.0
pkgrel=1
pkgdesc='An enhanced Markdown editor with MathJax, flowchart & sequence-diagram support'
arch=('x86_64' 'i686')
url='https://www.zybuluo.com/cmd'
license=('custom')
depends=('nss' 'gconf' 'libnotify' 'gtk2' 'alsa-lib' 'libxtst' 'libudev0-shim' 'hicolor-icon-theme')
DLAGENTS=("https::/usr/bin/wget --user-agent=Mozilla --referer=https://zybuluo.com -O %o %u")
source_x86_64=("${pkgname}_x86_64_${pkgver}.zip::https://client.zybuluo.com/cmd_linux64_v3.zip")
source_i686=("${pkgname}_i686_${pkgver}.zip::https://client.zybuluo.com/cmd_linux32_v3.zip")
options=('!strip')
sha256sums_x86_64=('ab1cf279d9edf10421771afb6e7665b6ebcf712955e9bd24be878774375677ef')
sha256sums_i686=('5ca01813eaed9ae3e162b03c8fc843b70c57f3a38335a005d6eed1366dcca9b3')
prepare(){
[ -d "${srcdir}/${pkgname/-/_}_linux64" ] && mv "${srcdir}/${pkgname/-/_}_linux64" "${srcdir}/${pkgname}"
[ -d "${srcdir}/${pkgname/-/_}_linux32" ] && mv "${srcdir}/${pkgname/-/_}_linux32" "${srcdir}/${pkgname}"
{
echo "Icon=${pkgname}"
echo "Terminal=false"
echo "Categories=Office;Applications;TextEditor;"
echo "Comment=An enhanced Markdown editor"
echo "Encoding=UTF-8"
} >> "${srcdir}/${pkgname}/Cmd Markdown.desktop"
sed -i "s/Exec=Cmd Markdown/Exec=${pkgname}/" "${srcdir}/${pkgname}/Cmd Markdown.desktop"
}
package(){
install -dm755 "${pkgdir}/usr/bin"
install -Dm644 "${srcdir}/${pkgname}/Cmd Markdown.desktop" "${pkgdir}/usr/share/applications/${pkgname}.desktop"
rm "${srcdir}/${pkgname}/Cmd Markdown.desktop"
# icons
find "${srcdir}/${pkgname}/package.nw/black_icons" -type f -name "icon_*x*.png" | while read -r icon_file; do
# 提取文件名
filename=$(basename "${icon_file}")
size="${filename##icon_}"
size="${size/.png/}"
install -Dm644 "${icon_file}" "${pkgdir}/usr/share/icons/hicolor/${size}/apps/${pkgname}.png"
done
# binary
install -Dm755 "${srcdir}/${pkgname}/Cmd Markdown" "${pkgdir}/opt/${pkgname}/Cmd Markdown"
ln -s "/opt/${pkgname}/Cmd Markdown" "${pkgdir}/usr/bin/${pkgname}"
rm "${srcdir}/${pkgname}/Cmd Markdown"
install -Dm755 "${srcdir}/${pkgname}/chrome_crashpad_handler" "${pkgdir}/opt/${pkgname}/chrome_crashpad_handler"
rm "${srcdir}/${pkgname}/chrome_crashpad_handler"
find "${pkgname}/" -type f -exec install -Dm644 {} "${pkgdir}/opt/{}" \;
}
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 |