pandora-box

LOW
maintainer zxp19821005 0 votes scanned 2026-09-17 00:27:14.276658
View on AUR
Why flagged

The package downloads data files (geoip.metadb, geosite.dat, GeoLite2-ASN.mmdb) from a dynamically chosen mirror, including untrusted hosts like ghfast.top, but these are non-executable database files used for geolocation; worst case is data corruption, not code execution.

Triggered rules

Low AI review downgraded a static finding llm_review

The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 90%): The package downloads data files (geoip.metadb, geosite.dat, GeoLite2-ASN.mmdb) from a dynamically chosen mirror, including untrusted hosts like ghfast.top, but these are non-executable database files used for geolocation; worst case is data corruption, not code execution.

1 higher static finding superseded - not the current verdict (shown for transparency)
Medium External download from an untrusted host, not in source=() 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:102 wget -O internal/em/geoip.metadb "https://${_DLURL}/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.metadb"
  • PKGBUILD:103 wget -O internal/em/GeoSite.dat "https://${_DLURL}/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
  • PKGBUILD:104 wget -O internal/em/GeoLite2-ASN.mmdb "https://${_DLURL}/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb"

PKGBUILD

3 offending line(s) highlighted
1# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
2pkgname=pandora-box
3_pkgname=Pandora-Box
4pkgver=1.0.23
5_electronversion=41
6_nodeversion=24
7pkgrel=1
8pkgdesc="A Simple Mihomo GUI.(Use system-wide electron)"
9arch=(
10 'aarch64'
11 'x86_64'
12)
13url="https://github.com/snakem982/Pandora-Box"
14license=('GPL-3.0-only')
15depends=(
16 "electron${_electronversion}"
17)
18makedepends=(
19 'gendesk'
20 'npm'
21 'nvm'
22 'go'
23 'git'
24 'wget'
25 'curl'
26 'jq'
27)
28source=(
29 "${pkgname}-${pkgver}::git+${url}#tag=v${pkgver}"
30 "${pkgname}.sh"
31)
32sha256sums=('819ac98dfb7a355b24b9b0bac3f35e57cd6a4a60955bb8a40bcda9b008aeac11'
33 'a774c2f54fbbeeaac3cefc0f7250796d30c86d27f0fd40b7eaf9c0fdb021623d')
34_ensure_local_nvm() {
35 export NVM_DIR="${srcdir}/.nvm"
36 source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
37 nvm install "${_nodeversion}"
38 nvm use "${_nodeversion}"
39}
40_get_app_dir() {
41 find "${srcdir}" -type f -name "resources.pak" -exec dirname {} + | head -n 1
42}
43_set_build_env() {
44 export ELECTRON_DIST="/usr/lib/electron${_electronversion}"
45 export ELECTRON_SKIP_BINARY_DOWNLOAD=1
46 export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/v//g')"
47 export HOME="${srcdir}/.electron-gyp"
48 export NPM_CONFIG_CACHE="${srcdir}/.npm_cache"
49 export NPM_CONFIG_MAXSOCKETS=32
50 export CGO_ENABLED=1
51 export GO111MODULE=on
52 export GOOS=linux
53 export GOCACHE="${srcdir}/go-build"
54 export GOMODCACHE="${srcdir}/go/pkg/mod"
55 if [[ "$(curl -s ipinfo.io/country)" == *"CN"* ]]; then
56 {
57 export NPM_CONFIG_REGISTRY="https://registry.npmmirror.com"
58 export NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"
59 export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
60 export ELECTRON_BUILDER_BINARIES_MIRROR="https://npmmirror.com/mirrors/electron-builder-binaries/"
61 }
62 export GOPROXY=https://goproxy.cn,direct
63 _DLURL="ghfast.top/https://github.com"
64 find ./ -type f -name "package-lock.json" -exec sed -i "s/registry.npmjs.org/registry.npmmirror.com/g" {} +
65 else
66 _DLURL="github.com"
67 fi
68}
69_get_electron_version() {
70 _elec_ver=$(find "${srcdir}" -maxdepth 5 -name "package.json" ! -path "*/node_modules/*" \
71 -exec grep -l '"electron"' {} + | xargs -I{} jq -r '(.devDependencies.electron // .dependencies.electron) // empty' {} 2>/dev/null | head -1)
72 [[ -z "${_elec_ver}" ]] && return 1
73 echo -e "The electron version is: \033[1;31m${_elec_ver%%.*}\033[0m"
74}
75prepare() {
76 cd "${srcdir}/${pkgname}-${pkgver}"
77 _get_electron_version
78 sed -i -e "
79 s/@electronversion@/${_electronversion}/g
80 s/@appname@/${pkgname}/g
81 s/@runname@/app.asar/g
82 s/@cfgdirname@/${_pkgname}/g
83 " "${srcdir}/${pkgname}.sh"
84 gendesk -q -f -n \
85 --pkgname="${pkgname}" \
86 --pkgdesc="${pkgdesc}" \
87 --categories="Network" \
88 --name="${_pkgname}" \
89 --exec="${pkgname} %U"
90 _set_build_env
91 _ensure_local_nvm
92 sed -i "s|export default defineConfig({});|export default defineConfig({\n build: {\n rollupOptions: {\n external: [/node_modules/],\n },\n },\n});|" vite.main.config.ts
93 sed -i "s| plugins: \[vue(),| optimizeDeps: {\n include: ['element-plus'],\n },\n plugins: [vue(),|" vite.config.ts
94 cd "${srcdir}/${pkgname}-${pkgver}"
95 sed -i "s|extraResource,|extraResource,\n electronZipDir: '${srcdir}/electron-zip',|" forge.config.ts
96 sed -i "s|\"vite\": \"7\.3\.1\"|\"vite\": \"^5.4.0\"|; s|\"@vitejs/plugin-vue\": \"6\.0\.1\"|\"@vitejs/plugin-vue\": \"^5.2.0\"|" package.json
97 find src-electron -type f -exec sed -i "s/process.resourcesPath/\'\/usr\/lib\/${pkgname}\'/g" {} +
98 sed -i "s/\"electron\": \"[^\"]*\"/\"electron\": \"${SYSTEM_ELECTRON_VERSION}\"/g" package.json
99 NODE_ENV=development npm install --legacy-peer-deps
100 cd "${srcdir}/${pkgname}-${pkgver}/src-go"
101 go mod tidy
102 wget -O internal/em/geoip.metadb "https://${_DLURL}/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.metadb"
103 wget -O internal/em/GeoSite.dat "https://${_DLURL}/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
104 wget -O internal/em/GeoLite2-ASN.mmdb "https://${_DLURL}/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb"
105}
106build() {
107 cd "${srcdir}/${pkgname}-${pkgver}/src-go"
108 _set_build_env
109 _ensure_local_nvm
110 _VERSION="$(git describe --tags --abbrev=0)"
111 go build -tags=with_gvisor -trimpath \
112 -ldflags "-s -w -X github.com/snakem982/pandora-box/api.Version=${_VERSION}" \
113 -o px
114 cd "${srcdir}/${pkgname}-${pkgver}"
115 NODE_ENV=production npm run package
116}
117package() {
118 install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
119 install -Dm755 -d "${pkgdir}/usr/lib/${pkgname}"
120 local _app_dir=$(_get_app_dir)
121 cp -a "${_app_dir}/resources/"* "${pkgdir}/usr/lib/${pkgname}/"
122 install -Dm644 "${srcdir}/${pkgname}-${pkgver}/build/appicon.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
123 install -Dm644 "${srcdir}/${pkgname}-${pkgver}/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
124}
125

Scan history

Scanned at (UTC)SeverityRules
2026-09-17 00:27:14 Low 2
2026-09-16 00:03:17 Low 2
2026-09-15 00:25:31 Low 2
2026-09-14 00:27:57 Low 2
2026-09-13 00:19:54 Low 2
2026-09-12 00:25:17 Low 2
2026-09-11 00:19:22 Low 2
2026-09-10 00:22:44 Low 2
2026-09-09 00:04:09 Low 2
2026-09-08 00:18:08 Low 2
2026-09-07 00:30:15 Low 2
2026-09-06 00:17:06 Low 2
2026-09-05 00:16:27 Low 2
2026-09-04 00:03:13 Low 2
2026-09-03 00:15:47 Low 2
2026-09-02 00:02:31 Low 2
2026-09-01 00:11:19 Low 2
2026-08-31 00:19:57 Low 2
2026-08-30 00:04:14 Low 2
2026-08-29 00:29:17 Low 2

Report a package

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

0 / 4000
Your suggestion