futubull-appimage
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=("https://softwaredownload.futunn.com/FTNN_desktop_${pkgver}_amd64.AppImage")
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 82%): This PKGBUILD downloads a prebuilt proprietary AppImage binary from softwaredownload.futunn.com (Futu's official software distribution CDN, not a personal/unofficial host) and executes it during the build phase both to extract assets and as the installed application. The sha512sums is set to SKIP, meaning there is no integrity verification whatsoever. While softwaredownload.futunn.com appears to be the legitimate vendor CDN for Futu/Futubull (a real Hong Kong brokerage), the combination of: (1) an executed prebuilt binary, (2) no checksum verification, and (3) the binary being installed system-wide and run as a financial trading application constitutes a genuine medium-severity supply-chain concern. If the CDN is compromised or the download is intercepted via MITM (no pinned hash to detect substitution), users would execute arbitrary code with their credentials in a financial context. This is a real concern, not a false positive, though it is a common pattern for AppImage-based AUR packages and not clearly malicious intent by the maintainer.
PKGBUILD
1 offending line(s) highlighted# Maintainer: skychan <diufanshu@gmail.com>
pkgname=futubull-appimage
pkgver=15.13.11208
pkgrel=1
pkgdesc="Futubull (富途牛牛) for Linux (AppImage) - Trade HK, US, CN (A-shares), options, ETFs across global markets platform"
arch=('x86_64')
url="https://github.com/skychan/futubull-appimage.git"
license=('MIT')
options=(!strip)
source=("https://softwaredownload.futunn.com/FTNN_desktop_${pkgver}_amd64.AppImage")
sha512sums=('SKIP')
_filename="FTNN_desktop_${pkgver}_amd64.AppImage"
_squashfs_desktop_file="FTNN.desktop"
_squashfs_icon_file="FTNN.png"
_appimage_name="Futubull"
_install_path="/opt/appimages/${_appimage_name}"
_desktop_file="/usr/share/applications/${_squashfs_desktop_file}"
package() {
chmod +x "${_filename}"
# Extract desktop and icon files from AppImage
./${_filename} --appimage-extract "${_squashfs_desktop_file}" >/dev/null 2>&1
./${_filename} --appimage-extract "usr/share/icons/hicolor/*/apps/${_squashfs_icon_file}" >/dev/null 2>&1
# Fix .desktop Exec and Icon paths
sed -i -E "s|Exec=.*|Exec=env DESKTOPINTEGRATION=0 APPIMAGELAUNCHER_DISABLE=1 /usr/bin/futubull|" "squashfs-root/${_squashfs_desktop_file}"
sed -i -E "s|Icon=.*|Icon=${_squashfs_icon_file}|" "squashfs-root/${_squashfs_desktop_file}"
# Install AppImage binary
install -Dm755 "${_filename}" "${pkgdir}/${_install_path}"
install -dm755 "${pkgdir}/usr/bin/"
ln -s "${_install_path}" "${pkgdir}/usr/bin/futubull"
# Install desktop entry
install -Dm644 "squashfs-root/${_squashfs_desktop_file}" "${pkgdir}/${_desktop_file}"
# Install icons
install -dm755 "${pkgdir}/usr/share/icons"
cp -dpr --no-preserve=ownership "squashfs-root/usr/share/icons" "${pkgdir}/usr/share"
chmod -R 755 "${pkgdir}/usr/share/icons"
find "${pkgdir}/usr/share/icons" -type f -name "${_squashfs_icon_file}" -exec chmod 644 {} \;
# Disable AppImageLauncher integration prompts
install -dm755 "${pkgdir}/usr/share/appimagekit"
}
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 |