pencil-dev-appimage

MEDIUM
maintainer Crosery 1 votes scanned 2026-09-17 00:27:14.276658
View on AUR
Why flagged

The package downloads a prebuilt AppImage from a non-whitelisted host (pencil.dev), which is an unverifiable executable; if the domain were compromised, an attacker could silently replace the binary, posing a supply-chain risk.

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:15 source=("Pencil-linux-x86_64-${pkgver}.AppImage::https://www.pencil.dev/download/Pencil-linux-x86_64.AppImage"
Medium AI review llm_review

An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is MEDIUM (confidence 90%): The package downloads a prebuilt AppImage from a non-whitelisted host (pencil.dev), which is an unverifiable executable; if the domain were compromised, an attacker could silently replace the binary, posing a supply-chain risk.

PKGBUILD

1 offending line(s) highlighted
1# Maintainer: Crosery <luoxi2024@gmail.com>
2
3pkgname=pencil-dev-appimage
4pkgver=1.2.0
5pkgrel=1
6pkgdesc="Design on canvas. Land in code. Increases engineering speed by bringing designing directly into your IDE. (AppImage)"
7arch=('x86_64')
8url="https://pencil.dev"
9license=('custom')
10provides=('pencil-dev')
11conflicts=('pencil-dev' 'pencil-dev-bin')
12depends=('fuse2' 'zlib' 'hicolor-icon-theme')
13install="${pkgname}.install"
14options=('!strip' '!debug')
15source=("Pencil-linux-x86_64-${pkgver}.AppImage::https://www.pencil.dev/download/Pencil-linux-x86_64.AppImage"
16 "LICENSE"
17 "${pkgname}.install")
18sha256sums=('f1220a87d52da551fa729e2c53014388a3774ed4634428559aa0eb10dcc30510'
19 'SKIP'
20 'SKIP')
21noextract=("Pencil-linux-x86_64-${pkgver}.AppImage")
22
23prepare() {
24 chmod +x "${srcdir}/Pencil-linux-x86_64-${pkgver}.AppImage"
25 "${srcdir}/Pencil-linux-x86_64-${pkgver}.AppImage" --appimage-extract >/dev/null 2>&1
26}
27
28package() {
29 # Install AppImage
30 install -Dm755 "${srcdir}/Pencil-linux-x86_64-${pkgver}.AppImage" \
31 "${pkgdir}/opt/${pkgname}/pencil-dev.AppImage"
32
33 # Create launcher script
34 install -d "${pkgdir}/usr/bin"
35 cat > "${pkgdir}/usr/bin/pencil-dev" << 'LAUNCHER'
36#!/bin/bash
37exec /opt/pencil-dev-appimage/pencil-dev.AppImage --no-sandbox "$@"
38LAUNCHER
39 chmod 755 "${pkgdir}/usr/bin/pencil-dev"
40
41 # Install desktop entry from extracted AppImage
42 if [ -f "${srcdir}/squashfs-root/pencil.desktop" ]; then
43 install -Dm644 "${srcdir}/squashfs-root/pencil.desktop" \
44 "${pkgdir}/usr/share/applications/pencil-dev.desktop"
45 # Fix desktop entry
46 sed -i 's|^Exec=.*|Exec=pencil-dev %U|' \
47 "${pkgdir}/usr/share/applications/pencil-dev.desktop"
48 sed -i 's|^Name=.*|Name=Pencil|' \
49 "${pkgdir}/usr/share/applications/pencil-dev.desktop"
50 else
51 # Fallback desktop entry
52 install -d "${pkgdir}/usr/share/applications"
53 cat > "${pkgdir}/usr/share/applications/pencil-dev.desktop" << EOF
54[Desktop Entry]
55Name=Pencil
56Comment=Design on canvas. Land in code.
57Exec=pencil-dev %U
58Icon=pencil-dev
59Type=Application
60Categories=Development;Graphics;
61MimeType=x-scheme-handler/pencil;
62EOF
63 chmod 644 "${pkgdir}/usr/share/applications/pencil-dev.desktop"
64 fi
65
66 # Install icons from extracted AppImage
67 for size in 16 32 48 64 128 256 512; do
68 icon="${srcdir}/squashfs-root/usr/share/icons/hicolor/${size}x${size}/apps/pencil.png"
69 if [ -f "${icon}" ]; then
70 install -Dm644 "${icon}" \
71 "${pkgdir}/usr/share/icons/hicolor/${size}x${size}/apps/pencil-dev.png"
72 fi
73 done
74
75 # Fallback: use any .png found in squashfs-root
76 if [ ! -f "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pencil-dev.png" ]; then
77 for icon in "${srcdir}"/squashfs-root/*.png; do
78 if [ -f "${icon}" ]; then
79 install -Dm644 "${icon}" \
80 "${pkgdir}/usr/share/icons/hicolor/256x256/apps/pencil-dev.png"
81 break
82 fi
83 done
84 fi
85
86 # Install MCP server to a stable path (AppImage mount point changes on each launch)
87 if [ -f "${srcdir}/squashfs-root/resources/app.asar.unpacked/out/mcp-server-linux-x64" ]; then
88 install -Dm755 "${srcdir}/squashfs-root/resources/app.asar.unpacked/out/mcp-server-linux-x64" \
89 "${pkgdir}/opt/${pkgname}/mcp-server"
90 fi
91
92 # Install license
93 if [ -f "${srcdir}/LICENSE" ]; then
94 install -Dm644 "${srcdir}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
95 fi
96}
97
98

Scan history

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

Report a package

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

0 / 4000
Your suggestion