utools-bin

MEDIUM
maintainer zxp19821005 6 votes scanned 2026-11-01 00:21:48.120785
View on AUR
Why flagged

The package downloads a prebuilt .deb from a non-standard host (open.u-tools.cn) which is not a common trusted source for binaries, posing a potential supply-chain risk if the host is compromised or malicious.

Triggered rules

Medium source=() URL on a non-standard host 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:22 "${pkgname%-bin}-${pkgver}.deb::https://open.u-tools.cn/download/${pkgname%-bin}_${pkgver}_amd64.deb"
Medium AI review llm_review

An AI model (qwen/qwen3-235b-a22b-2507) reviewed this and agrees it is MEDIUM (confidence 85%): The package downloads a prebuilt .deb from a non-standard host (open.u-tools.cn) which is not a common trusted source for binaries, posing a potential supply-chain risk if the host is compromised or malicious.

PKGBUILD

1 offending line(s) highlighted
1# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
2pkgname=utools-bin
3_pkgname=uTools
4# 更新日志 https://www.u-tools.cn/docs/guide/changelog.html
5pkgver=8.0.2
6_electronversion=34
7pkgrel=1
8pkgdesc="uTools Utilities.新一代效率工具平台,自由组合插件应用,打造专属你的趁手工具集"
9arch=('x86_64')
10url="https://www.u-tools.cn/"
11_ghurl="https://github.com/uTools-Labs"
12license=('LicenseRef-custom')
13conflicts=("${pkgname%-bin}")
14provides=("${pkgname%-bin}=${pkgver}")
15depends=(
16 "electron${_electronversion}"
17)
18options=(
19 '!strip'
20)
21source=(
22 "${pkgname%-bin}-${pkgver}.deb::https://open.u-tools.cn/download/${pkgname%-bin}_${pkgver}_amd64.deb"
23 "LICENSE-${pkgver}.html::${url}/agreement.html"
24)
25sha256sums=('3904b1081ae0562cd1ae4c3f3d33592521f3a9001f72392b5b0228cde3c23056'
26 '986625f2970528f051391a41b1ede526de70c896209fc5bf818934b88cc12cfd')
27_get_app_dir() {
28 find "${srcdir}" -type f -name "resources.pak" ! -path "*/node_modules/*" -printf '%h\n' 2>/dev/null \
29 | while read -r d; do [[ -d "${d}/resources" ]] && { echo "$d"; return 0; }; done
30}
31_check_electron_version() {
32 local _v=$(strings "$(find "$(_get_app_dir)" -maxdepth 1 -type f \
33 -executable -printf '%s %p\n' | sort -nr | head -1 | cut -d' ' -f2-)" \
34 | grep -oP 'Electron/\K[0-9]+' | head -1)
35 [[ -z "$_v" ]] && { echo -e "\033[1;33mNote: Could not check version.\033[0m"; return; }
36 (( _v == _electronversion )) && c=32 || c=31
37 echo -e "Electron version: \033[1;${c}m$_v$([[ $c -eq 31 ]] && echo " (expected $_electronversion)")\033[0m"
38}
39prepare() {
40 bsdtar -xf "${srcdir}/data."*
41 _check_electron_version
42 sed -i "s/\/opt\/${_pkgname}\///g" "${srcdir}/usr/share/applications/${pkgname%-bin}.desktop"
43 _file_list=(chrome_100_percent.pak chrome_200_percent.pak chrome-sandbox icudtl.dat libEGL.so libffmpeg.so \
44 libGLESv2.so libvk_swiftshader.so libvulkan.so.1 resources.pak vk_swiftshader_icd.json)
45 for _files in "${_file_list[@]}";do
46 ln -sf "/usr/lib/electron${_electronversion}/${_files}" "${srcdir}/opt/${_pkgname}/${_files}"
47 done
48}
49package() {
50 install -Dm755 -d "${pkgdir}/usr/bin"
51 cp -a "${srcdir}/opt" "${pkgdir}"
52 ln -sf "/opt/${_pkgname}/${pkgname%-bin}" "${pkgdir}/usr/bin/${pkgname%-bin}"
53 install -Dm644 "${srcdir}/usr/share/applications/${pkgname%-bin}.desktop" -t "${pkgdir}/usr/share/applications"
54 find "${srcdir}" -type f \( -name "*.png" -o -name "*.svg" \) -path "*share/icons/*" | while read -r _i; do
55 _extension="${_i##*.}"
56 _icon_path="${_i#*share/icons/}"
57 _target_dir="/usr/share/icons/$(dirname "${_icon_path}")"
58 install -Dm644 "${_i}" "${pkgdir}${_target_dir}/${pkgname%-bin}.${_extension}"
59 done
60 install -Dm644 "${srcdir}/LICENSE-${pkgver}.html" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.html"
61}
62

Changes since previous scan

--- PKGBUILD @ 2026-10-30 00:29
+++ PKGBUILD @ 2026-11-01 00:21
@@ -2,12 +2,12 @@
pkgname=utools-bin
_pkgname=uTools
# 更新日志 https://www.u-tools.cn/docs/guide/changelog.html
-pkgver=7.8.0
-_electronversion=22
+pkgver=8.0.2
+_electronversion=34
pkgrel=1
-pkgdesc="uTools Utilities.(Prebuilt version)新一代效率工具平台,自由组合插件应用,打造专属你的趁手工具集"
+pkgdesc="uTools Utilities.新一代效率工具平台,自由组合插件应用,打造专属你的趁手工具集"
arch=('x86_64')
-url="https://u.tools"
+url="https://www.u-tools.cn/"
_ghurl="https://github.com/uTools-Labs"
license=('LicenseRef-custom')
conflicts=("${pkgname%-bin}")
@@ -22,32 +22,41 @@
"${pkgname%-bin}-${pkgver}.deb::https://open.u-tools.cn/download/${pkgname%-bin}_${pkgver}_amd64.deb"
"LICENSE-${pkgver}.html::${url}/agreement.html"
)
-sha256sums=('38fd1a7d1b558c55756e1436bd58e7d6fd46eb0271319a4af2113a6188e1857b'
+sha256sums=('3904b1081ae0562cd1ae4c3f3d33592521f3a9001f72392b5b0228cde3c23056'
'986625f2970528f051391a41b1ede526de70c896209fc5bf818934b88cc12cfd')
-_get_electron_version() {
- _elec_ver="$(strings "${srcdir}/opt/${_pkgname}/${pkgname%-bin}" | grep '^Chrome/[0-9.]* Electron/[0-9]' | cut -d'/' -f3 | cut -d'.' -f1)"
- echo -e "The electron version is: \033[1;31m${_elec_ver}\033[0m"
+_get_app_dir() {
+ find "${srcdir}" -type f -name "resources.pak" ! -path "*/node_modules/*" -printf '%h\n' 2>/dev/null \
+ | while read -r d; do [[ -d "${d}/resources" ]] && { echo "$d"; return 0; }; done
+}
+_check_electron_version() {
+ local _v=$(strings "$(find "$(_get_app_dir)" -maxdepth 1 -type f \
+ -executable -printf '%s %p\n' | sort -nr | head -1 | cut -d' ' -f2-)" \
+ | grep -oP 'Electron/\K[0-9]+' | head -1)
+ [[ -z "$_v" ]] && { echo -e "\033[1;33mNote: Could not check version.\033[0m"; return; }
+ (( _v == _electronversion )) && c=32 || c=31
+ echo -e "Electron version: \033[1;${c}m$_v$([[ $c -eq 31 ]] && echo " (expected $_electronversion)")\033[0m"
}
prepare() {
bsdtar -xf "${srcdir}/data."*
- _get_electron_version
+ _check_electron_version
sed -i "s/\/opt\/${_pkgname}\///g" "${srcdir}/usr/share/applications/${pkgname%-bin}.desktop"
_file_list=(chrome_100_percent.pak chrome_200_percent.pak chrome-sandbox icudtl.dat libEGL.so libffmpeg.so \
- libGLESv2.so libvk_swiftshader.so libvulkan.so.1 resources.pak vk_swiftshader_icd.json)
- for _files in "${_file_list[@]}";do
- ln -sf "/usr/lib/electron${_electronversion}/${_files}" "${srcdir}/opt/${_pkgname}/${_files}"
- done
+ libGLESv2.so libvk_swiftshader.so libvulkan.so.1 resources.pak vk_swiftshader_icd.json)
+ for _files in "${_file_list[@]}";do
+ ln -sf "/usr/lib/electron${_electronversion}/${_files}" "${srcdir}/opt/${_pkgname}/${_files}"
+ done
}
package() {
install -Dm755 -d "${pkgdir}/usr/bin"
- cp -Pr --no-preserve=ownership "${srcdir}/opt" "${pkgdir}"
+ cp -a "${srcdir}/opt" "${pkgdir}"
ln -sf "/opt/${_pkgname}/${pkgname%-bin}" "${pkgdir}/usr/bin/${pkgname%-bin}"
install -Dm644 "${srcdir}/usr/share/applications/${pkgname%-bin}.desktop" -t "${pkgdir}/usr/share/applications"
- _icon_sizes=(16x16 32x32 48x48 64x64 128x128 256x256 512x512)
- for _icons in "${_icon_sizes[@]}";do
- install -Dm644 "${srcdir}/usr/share/icons/hicolor/${_icons}/apps/${pkgname%-bin}.png" \
- -t "${pkgdir}/usr/share/icons/hicolor/${_icons}/apps"
- done
+ find "${srcdir}" -type f \( -name "*.png" -o -name "*.svg" \) -path "*share/icons/*" | while read -r _i; do
+ _extension="${_i##*.}"
+ _icon_path="${_i#*share/icons/}"
+ _target_dir="/usr/share/icons/$(dirname "${_icon_path}")"
+ install -Dm644 "${_i}" "${pkgdir}${_target_dir}/${pkgname%-bin}.${_extension}"
+ done
install -Dm644 "${srcdir}/LICENSE-${pkgver}.html" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.html"
}

Scan history

Scanned at (UTC)SeverityRules
2026-11-01 00:21:48 Medium 2
2026-10-31 00:07:41 Medium 2
2026-10-30 09:55:25 Medium 2
2026-10-30 00:29:30 Low 2
2026-10-29 00:13:55 Low 2
2026-10-28 00:06:54 Low 2
2026-10-27 00:23:28 Low 2
2026-10-26 00:12:40 Low 2
2026-10-25 00:20:48 Low 2
2026-10-24 00:14:55 Low 2
2026-10-23 00:02:19 Low 2
2026-10-22 00:13:10 Low 2
2026-10-21 00:12:50 Low 2
2026-10-20 00:10:31 Low 2
2026-10-19 00:03:55 Low 2
2026-10-18 00:06:55 Low 2
2026-10-17 00:21:55 Low 2
2026-10-16 00:12:47 Low 2
2026-10-15 00:28:05 Low 2
2026-10-14 00:06:47 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