piskel-bin
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:21
wget --load-cookies /tmp/piskel_install_cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/piskel_install_cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1EFo7Ye_rl7bGNr4iehXIgFg4gn2IcWDX' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1EFo7Ye_rl7bGNr4iehXIgFg4gn2IcWDX" -O "Piskel-0.14.0-64bits.zip" && rm -rf /tmp/piskel_install_cookies.txt
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 85%): The PKGBUILD downloads a prebuilt binary ZIP from Google Drive (a personal/opaque file host) outside of the source=() array, meaning there is no checksum verification for the actual executable being installed. The Google Drive file ID '1EFo7Ye_rl7bGNr4iehXIgFg4gn2IcWDX' can be swapped at any time by whoever controls that Drive account, and the downloaded binary is a native executable (an Electron/NW.js app 'piskel') that gets installed and run directly. This is a genuine supply-chain risk: an unverified, unchecksumed prebuilt binary from an unofficial host is executed on the user's system. The cookie-handling wget pattern is the standard workaround for Google Drive large-file downloads and is not itself obfuscation, but the lack of integrity verification for the actual payload is the real concern. Severity is medium rather than high because there is no evidence of active malice — it appears to be a legitimate but poorly packaged binary — however the unverifiable, swappable binary from a non-canonical host is a real supply-chain concern.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Famiu Haque <famiuhaque@gmail.com>
pkgname=piskel-bin
pkgver=0.14.0
pkgrel=1
pkgdesc="A free online editor for animated sprites & pixel art."
arch=('x86_64')
url="https://github.com/piskelapp/piskel"
license=('Apache')
makedepends=('unzip' 'imagemagick')
depends=('gconf' 'gtk2' 'alsa-lib' 'libxss' 'nss' 'libxtst')
conflicts=('piskel')
provides=('piskel')
options=(!strip)
source=("logo.ico::https://github.com/piskelapp/piskel/raw/master/misc/desktop/logo.ico"
"Piskel.desktop")
sha256sums=('c2f050d7a8e779af36018947a91a4e6f613eeb1d832d96dc979565a71fe3c282'
'193985d8343485ee4c4388432e0426d82a29437f9a3ad3fb3bbf19a3793a5f17')
prepare()
{
wget --load-cookies /tmp/piskel_install_cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/piskel_install_cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1EFo7Ye_rl7bGNr4iehXIgFg4gn2IcWDX' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1EFo7Ye_rl7bGNr4iehXIgFg4gn2IcWDX" -O "Piskel-0.14.0-64bits.zip" && rm -rf /tmp/piskel_install_cookies.txt
unzip -o Piskel-0.14.0-64bits.zip
}
package()
{
install -d "${pkgdir}/opt/"
cp -a "${srcdir}/Piskel-0.14.0-64bits" "${pkgdir}/opt/Piskel"
chmod +r -R "${pkgdir}/opt/Piskel/"
chmod +rx "${pkgdir}/opt/Piskel/lib/"
chmod +x "${pkgdir}/opt/Piskel/piskel"
install -d "${pkgdir}/usr/share/applications"
install "${srcdir}/Piskel.desktop" "${pkgdir}/usr/share/applications"
chmod +x "${pkgdir}/usr/share/applications/Piskel.desktop"
install -d "${pkgdir}/usr/bin"
ln -s "/opt/Piskel/piskel" "${pkgdir}/usr/bin/piskel"
convert "${srcdir}/logo.ico" "${srcdir}/logo.png"
install -d "${pkgdir}/usr/share/pixmaps"
install "${srcdir}/logo-3.png" "${pkgdir}/usr/share/pixmaps/piskel.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 |