xtool-creative-space
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:18
"https://storage-us.xtool.com/resource/efficacy/xcs/prod-us/packages/15/acc9990c-d436-483c-89bf-d9749831be1f/$_fname"
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 Windows .exe installer from storage-us.xtool.com (xTool's official CDN/storage host for their laser software), extracts it with asar, and installs the resulting Electron app. The host appears to be xTool's own distribution infrastructure (consistent with the official product URL xtool.com/pages/software), not a personal or third-party host. However, the source is a prebuilt binary blob from a CDN path with a UUID-style directory, there is no GPG signature verification, and the sha256 checksums are the only integrity guarantee. The package also substitutes a sharp native module and copies it over a proprietary xcs_cpp_module binary (acknowledged as a hack). Executing extracted native .node binaries from a proprietary vendor package without signature verification is a genuine supply-chain concern — if the CDN or the UUID path were compromised, arbitrary native code would execute. This is a real medium-severity concern: prebuilt executed binaries from a vendor CDN without cryptographic signing, though not clearly malicious.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Baltazár Radics <baltazar.radics@gmail.com>
pkgname=xtool-creative-space
_date=2025-06-19-11-01-27
_sharpver=0.32.6
pkgver=2.7.22
pkgrel=1
pkgdesc='The Strongest Yet Easiest Laser Software'
arch=(x86_64)
url='https://www.xtool.com/pages/software'
license=(proprietary)
_electron=electron31
depends=($_electron libvips bubblewrap)
makedepends=(asar)
options=(!debug)
_fname="xTool-Creative-Space-$pkgver-$_date.exe"
# curl -s https://www.xtool.com/pages/software | grep -o 'data-href="[^"]*.exe"'
source=(
"https://storage-us.xtool.com/resource/efficacy/xcs/prod-us/packages/15/acc9990c-d436-483c-89bf-d9749831be1f/$_fname"
"https://github.com/lovell/sharp/releases/download/v$_sharpver/sharp-v$_sharpver-napi-v7-linux-x64.tar.gz"
$pkgname.{sh,desktop}
)
sha256sums=('6cd17873b10b62d1d00001c724251e5f58123964b2ec5060ad389ca72389ac9a'
'994679b5089fee0608f94f1b5f6f75a0dcc79a64f3a929d147503e8d0e91dd2f'
'8a7e431c37b526eafcf825eaeabac17d7232c03e8077bb5e345bd147a49d6f9d'
'619023f7b9f981df633985134d50195bab3b93a7ae2a53921df6ceb9ff022299')
build() {
asar e resources/app.asar app
rm -rf app/node_modules/sharp/{build,vendor}
cp -Ta build app/node_modules/sharp/build
rm -rf buildResources/esptool
# Absolute hack. New version tries to load this on startup so it fails to start at all.
# This way, it won't crash immediately but it's still unable to actually plot stuff.
cp build/Release/sharp-linux-x64.node app/node_modules/@xtool/xcs_cpp_module/prebuild/electron/31.7/xcs_cpp_module.node
}
package() {
install -d "$pkgdir"/usr/lib/$pkgname/resources
cp -Ta buildResources "$pkgdir"/usr/lib/$pkgname/buildResources
asar p app "$pkgdir"/usr/lib/$pkgname/resources/app.asar --unpack-dir 'node_modules/{@makeblock,sharp,@xtool}'
install -Dm755 $pkgname.sh "$pkgdir"/usr/bin/$pkgname
install -Dm644 $pkgname.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop
install -Dm644 "$pkgdir"/usr/lib/$pkgname/buildResources/linux/256x256.png "$pkgdir"/usr/share/pixmaps/$pkgname.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 |