akiflow-bin
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:15
source=("Akiflow-${pkgver}.exe::https://download.akiflow.com/builds/Akiflow-${pkgver}-${_buildhash}-x64.exe"
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 78%): Two distinct supply-chain concerns exist here. First, the Windows installer (Akiflow.exe) is downloaded from download.akiflow.com, which is the official vendor CDN — not an unofficial host — so that part is actually fine, and the sha512 checksum is provided. Second, and more seriously, a Python script (patch-main.py) is fetched from a personal GitHub repository (shrimpwtf/akiflow-arch) with 'SKIP' for its checksum, and this script is then executed during the build phase to patch app.asar. All other auxiliary files (QML widget files, PNG, JSON) also use 'SKIP'. The executed patch-main.py from an unverified personal repo with no integrity check is a genuine supply-chain risk: the maintainer can silently change the script at any time to execute arbitrary code during the build. This is a real medium-severity concern — not a false positive — because it is an executed script from an unofficial personal host with no checksum verification.
PKGBUILD
1 offending line(s) highlighted# Maintainer: shrimp
# Akiflow Desktop for Linux (unofficial)
pkgname=akiflow-bin
pkgver=2.72.5
pkgrel=1
_buildhash=7536ef84
pkgdesc="Akiflow - Time blocking and task management (unofficial Linux build)"
arch=('x86_64')
url="https://akiflow.com"
license=('custom')
depends=('electron')
makedepends=('p7zip' 'imagemagick' 'icoutils' 'python')
_ghraw="https://raw.githubusercontent.com/shrimpwtf/akiflow-arch/main"
source=("Akiflow-${pkgver}.exe::https://download.akiflow.com/builds/Akiflow-${pkgver}-${_buildhash}-x64.exe"
"patch-main.py::${_ghraw}/patch-main.py"
"plasma-widget-metadata.json::${_ghraw}/plasma-widget/package/metadata.json"
"plasma-widget-main.qml::${_ghraw}/plasma-widget/package/contents/ui/main.qml"
"plasma-widget-CompactRepresentation.qml::${_ghraw}/plasma-widget/package/contents/ui/CompactRepresentation.qml"
"plasma-widget-FullRepresentation.qml::${_ghraw}/plasma-widget/package/contents/ui/FullRepresentation.qml"
"plasma-widget-akiflow.png::${_ghraw}/plasma-widget/package/contents/icons/akiflow.png")
sha512sums=('e4aeadcf7ec8a2a9c46dda84fe59d1cf38898808f891d28f98c73c8e1514d61051f4fa19215774c56c5c297befddefce4f8e55a6ec9bc92ed5d6a8b59c5a155d'
'SKIP'
'SKIP'
'SKIP'
'SKIP'
'SKIP'
'SKIP')
prepare() {
cd "${srcdir}"
# Extract the NSIS installer
7z x -y "Akiflow-${pkgver}.exe" -oextracted
# Extract icons from exe if present
if [ -f "extracted/\$PLUGINSDIR/app-64.7z" ]; then
7z x -y "extracted/\$PLUGINSDIR/app-64.7z" -oapp
else
# Fallback: the app might be directly in extracted
cp -r extracted app 2>/dev/null || true
fi
# Try to extract icon
if [ -f "app/Akiflow.exe" ]; then
wrestool -x -t 14 app/Akiflow.exe -o akiflow.ico 2>/dev/null || true
elif [ -f "extracted/Akiflow.exe" ]; then
wrestool -x -t 14 extracted/Akiflow.exe -o akiflow.ico 2>/dev/null || true
fi
# Convert ico to png if we got one
if [ -f "akiflow.ico" ]; then
icotool -x akiflow.ico 2>/dev/null || true
mkdir -p icons/hicolor
for size in 16 24 32 48 64 128 256; do
icon_file=$(ls akiflow_*"${size}x${size}"*.png 2>/dev/null | head -1)
if [ -n "$icon_file" ]; then
mkdir -p "icons/hicolor/${size}x${size}/apps"
cp "$icon_file" "icons/hicolor/${size}x${size}/apps/akiflow.png"
fi
done
fi
}
_find_asar() {
if [ -f "${srcdir}/app/resources/app.asar" ]; then
echo "${srcdir}/app/resources"
elif [ -f "${srcdir}/extracted/resources/app.asar" ]; then
echo "${srcdir}/extracted/resources"
else
dirname "$(find "${srcdir}" -name 'app.asar' -type f | head -1)"
fi
}
build() {
# Patch app.asar to write tray status for the KDE Plasma widget
ASAR_PATH="$(_find_asar)"
if [ -z "$ASAR_PATH" ] || [ ! -f "$ASAR_PATH/app.asar" ]; then
echo "ERROR: Could not find app.asar"
exit 1
fi
cd "$ASAR_PATH"
python "${srcdir}/patch-main.py"
}
package() {
ASAR_PATH="$(_find_asar)"
if [ -z "$ASAR_PATH" ] || [ ! -f "$ASAR_PATH/app.asar" ]; then
echo "ERROR: Could not find app.asar"
exit 1
fi
# Install app files
install -d "${pkgdir}/usr/lib/${pkgname}"
cp "$ASAR_PATH/app.asar" "${pkgdir}/usr/lib/${pkgname}/"
# Copy unpacked resources if they exist
if [ -d "$ASAR_PATH/app.asar.unpacked" ]; then
cp -r "$ASAR_PATH/app.asar.unpacked" "${pkgdir}/usr/lib/${pkgname}/"
fi
# Install icons if we extracted them
if [ -d "${srcdir}/icons/hicolor" ]; then
install -d "${pkgdir}/usr/share/icons"
cp -r "${srcdir}/icons/"* "${pkgdir}/usr/share/icons/"
fi
# Create desktop file
install -Dm644 /dev/stdin "${pkgdir}/usr/share/applications/${pkgname}.desktop" <<EOF
[Desktop Entry]
Name=Akiflow
GenericName=Task Management
Comment=Time blocking and task management
Exec=${pkgname} %u
Icon=akiflow
Type=Application
Terminal=false
Categories=Office;ProjectManagement;Calendar;
MimeType=x-scheme-handler/akiflow;
StartupWMClass=Akiflow
EOF
# Create launcher script
install -Dm755 /dev/stdin "${pkgdir}/usr/bin/${pkgname}" <<EOF
#!/bin/sh
exec electron --class=Akiflow --name=Akiflow /usr/lib/${pkgname}/app.asar "\$@"
EOF
# Install KDE Plasma widget for upcoming events
install -d "${pkgdir}/usr/share/plasma/plasmoids/com.akiflow.panelwidget/contents/ui"
install -d "${pkgdir}/usr/share/plasma/plasmoids/com.akiflow.panelwidget/contents/icons"
install -Dm644 "${srcdir}/plasma-widget-metadata.json" \
"${pkgdir}/usr/share/plasma/plasmoids/com.akiflow.panelwidget/metadata.json"
install -Dm644 "${srcdir}/plasma-widget-main.qml" \
"${pkgdir}/usr/share/plasma/plasmoids/com.akiflow.panelwidget/contents/ui/main.qml"
install -Dm644 "${srcdir}/plasma-widget-CompactRepresentation.qml" \
"${pkgdir}/usr/share/plasma/plasmoids/com.akiflow.panelwidget/contents/ui/CompactRepresentation.qml"
install -Dm644 "${srcdir}/plasma-widget-FullRepresentation.qml" \
"${pkgdir}/usr/share/plasma/plasmoids/com.akiflow.panelwidget/contents/ui/FullRepresentation.qml"
install -Dm644 "${srcdir}/plasma-widget-akiflow.png" \
"${pkgdir}/usr/share/plasma/plasmoids/com.akiflow.panelwidget/contents/icons/akiflow.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 |