popsql
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:14
source=("PopSQL-${pkgver}.AppImage::https://get.popsql.com/download/AppImage")
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): The PKGBUILD downloads a prebuilt proprietary AppImage binary from get.popsql.com, which is the official PopSQL download host (popsql.com is the vendor's own domain). The binary is executed during prepare() via --appimage-extract and then installed and run as the application. A sha256sum is pinned, which mitigates silent substitution to some degree, but the URL is a redirect/alias ('download/AppImage' without a version-specific path), meaning the checksum could become stale or the file could be swapped at the CDN level between versions. The host itself (get.popsql.com) is the vendor's official distribution endpoint, not a personal or unofficial host, so this is closer to a standard proprietary binary package than a rogue supply-chain risk. The pattern is common in AUR for Electron/AppImage apps (e.g., slack, discord, zoom). The medium rating is marginally justified only because the download URL is not version-pinned (no version in the path), making the sha256 the sole integrity guard, and the binary is directly executed. No obfuscation, exfiltration, or clearly malicious behavior is present.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Rami Chowdhury <necaris@gmail.com>
# Maintainer: Tobias Backer Dirks <omgitsaheadcrab@gmail.com>
# Co-Maintainer: LSM <sagargaud88@gmail.com>
pkgname=popsql
pkgver=1.0.135
pkgrel=1
pkgdesc="Collaborative SQL editor for teams"
arch=('x86_64')
url="https://popsql.com"
license=('custom:proprietary')
depends=('fuse2' 'gtk3' 'nss' 'libxss' 'libnotify' 'alsa-lib')
provides=('popsql')
conflicts=('popsql')
source=("PopSQL-${pkgver}.AppImage::https://get.popsql.com/download/AppImage")
sha256sums=('1dec3c2cbea7365a80967f50970321b5e2de8cf039ddc9c0d9f92f4dfcab1746')
options=('!strip')
prepare() {
chmod +x "PopSQL-${pkgver}.AppImage"
./PopSQL-${pkgver}.AppImage --appimage-extract >/dev/null 2>&1
}
package() {
# Install AppImage
install -Dm755 "${srcdir}/PopSQL-${pkgver}.AppImage" \
"${pkgdir}/opt/${pkgname}/PopSQL.AppImage"
# Wrapper script
install -Dm755 /dev/stdin "${pkgdir}/usr/bin/${pkgname}" << 'EOF'
#!/bin/bash
exec /opt/popsql/PopSQL.AppImage "$@"
EOF
# Install desktop file
if [[ -f "${srcdir}/squashfs-root/@popsqldesktop.desktop" ]]; then
install -Dm644 "${srcdir}/squashfs-root/@popsqldesktop.desktop" \
"${pkgdir}/usr/share/applications/popsql.desktop"
sed -i 's|Exec=AppRun.*|Exec=/usr/bin/popsql %U|g' \
"${pkgdir}/usr/share/applications/popsql.desktop"
sed -i 's|Icon=.*|Icon=popsql|g' \
"${pkgdir}/usr/share/applications/popsql.desktop"
fi
# FIXED: Correct icon installation with proper path parsing
if [[ -d "${srcdir}/squashfs-root/usr/share/icons/hicolor" ]]; then
find "${srcdir}/squashfs-root/usr/share/icons/hicolor" -name "@popsqldesktop.png" | while read icon; do
# Get the full path relative to hicolor directory
relative_path="${icon#${srcdir}/squashfs-root/usr/share/icons/hicolor/}"
# Replace the @popsqldesktop filename with popsql.png
target_path="${relative_path//@popsqldesktop.png/popsql.png}"
# Install to correct location
install -Dm644 "$icon" "${pkgdir}/usr/share/icons/hicolor/${target_path}"
done
fi
# Install licenses
if [[ -f "${srcdir}/squashfs-root/LICENSE.electron.txt" ]]; then
install -Dm644 "${srcdir}/squashfs-root/LICENSE.electron.txt" \
"${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.electron.txt"
fi
install -Dm644 /dev/stdin "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" << EOF
PopSQL - Proprietary Software
Copyright © PopSQL, Inc. All rights reserved.
This software is proprietary and subject to the terms at: https://popsql.com/terms
EOF
}
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 |