easy2boot
Triggered rules
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:43
_url=$(wget -O- --post-data="${postData}" --header='Content-Type:application/json' https://api.fosshub.com/download/ | jq '.data.url' | sed -e 's/^"//' -e 's/"$//')
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
"fosshub.html::https://www.fosshub.com/Easy2Boot.html/${_fileName}"
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): The PKGBUILD downloads a password-protected zip from FossHub (a legitimate open-source hosting site), but the actual download URL is resolved dynamically at build time by scraping the FossHub HTML page, calling the FossHub API, and then fetching the real zip with wget inside prepare(). The checksum is SKIP, so there is no integrity verification of the final binary payload. The zip is then extracted with bsdtar using a hardcoded passphrase ('e2b'). The package installs several executables (bootlace.com, udefrag, defragfs, etc.) — prebuilt binaries — directly into /opt and /usr/bin. The core concern is: (1) prebuilt binaries with no checksum verification, (2) the download URL is constructed dynamically at build time via an API call, meaning the actual binary fetched is not pinned to any hash and could be substituted server-side or via MITM. FossHub is a legitimate hosting platform, but the dynamic URL resolution and SKIP checksum mean there is a genuine supply-chain risk for executed binaries. This is a real medium-severity concern, not a false positive.
PKGBUILD
2 offending line(s) highlighted# Maintainer: Asger Hautop Drewsen <asgerdrewsen@gmail.com>
# You need to manually download the Easy2Boot_v1.B8 zip file from:
# https://www.fosshub.com/Easy2Boot.html?dwl=Easy2Boot_v1.B8.zip
_grub4dos_version=0.4.5
pkgname='easy2boot'
pkgver='2.19'
pkgrel='1'
pkgdesc='Highly-configurable USB drive multiboot software with support for Secure UEFI booting'
url='http://www.easy2boot.com/'
arch=('any')
license=('custom:easy2boot license')
depends=()
makedepends=('dos2unix' 'jq')
install="$pkgname.install"
_projectName='Easy2Boot'
# _projectUri="${_projectName}.html"
# _projectId='5d01346325224d0a6d31f6d8'
_fileName="${_projectName}_v${pkgver}_password_is_e2b.zip"
source=(
"fosshub.html::https://www.fosshub.com/Easy2Boot.html/${_fileName}"
# "grub4dos.rar::http://dl.grub4dos.chenall.net/grub4dos-${_grub4dos_version}-2009-12-23.rar"
)
noextract=('fosshub.html')
md5sums=('SKIP')
prepare() {
json=$(cat fosshub.html | sed -n 's/.*var.*settings.*=//p' | jq)
# projectId=$(echo ${json} | jq '{projectId: .projectId}')
tempJson=$(echo ${json} | jq --arg _fileName ${_fileName} '.pool.f[] | select(.n==$_fileName) | {fileName: .n, releaseId: .r}')
tempJson2=$(echo $json | jq '.pool | {projectId: .p, source: .c, projectUri: .u}')
# echo ${tempJson}
postData=$(echo $tempJson $tempJson2 | jq -s 'add')
# echo $postData | jq
_url=$(wget -O- --post-data="${postData}" --header='Content-Type:application/json' https://api.fosshub.com/download/ | jq '.data.url' | sed -e 's/^"//' -e 's/"$//')
# _url=$(wget -O- --post-data="${postData}" --header='Content-Type:application/json' https://api.fosshub.com/download/ | sed -n 's/.*"data"://p' | jq '.url')
# _url=${_url:}
# echo $_url
wget -O ${_fileName} $_url
bsdtar -x --passphrase e2b -f ${_fileName}
cd "$srcdir/_ISO"
bsdtar -c -v -f "CONTIG.ISO.xz" -J "CONTIG.ISO"
rm "CONTIG.ISO"
# Use newer, working bootlace
# unrar e grub4dos.rar grub4dos-${_grub4dos_version}/bootlace.com
# mv bootlace.com _ISO/docs/linux_utils/bootlace.com
# rm grub4dos.rar
}
package() {
rm "${_fileName}"
rm "fosshub.html"
execs=(
'add-32-bit-support.sh'
'bootlace.com'
'bootlace64.com'
'CreatePersistenceFile.sh'
'defragfs'
'defragfs.pl'
'fmt.sh'
'fmt_ntfs.sh'
'grldr.mbr'
'ReadMe_fmt.sh.txt'
'runfmt.sh'
'udefrag'
)
mkdir -p "${pkgdir}/usr/bin"
dir="${pkgdir}/opt/easy2boot"
mkdir -p "$dir"
cp -r . "$dir"
for f in "${execs[@]}"; do
d="_ISO/docs/linux_utils/$f"
dos2unix "${dir}/$d"
chmod +x "${dir}/$d"
_make_wrapper "/opt/easy2boot/$d" "${pkgdir}/usr/bin/$f"
done
install -Dpm644 "_ISO/docs/Licences/E2B_LICENCE.txt" -T "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}
_make_wrapper() {
cat > "$2" <<END
#!/bin/bash
exec "$1" "\$@"
END
chmod +x "$2"
}
Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | MEDIUM | 3 |
| 2026-08-02 00:16:08 | MEDIUM | 3 |
| 2026-08-01 00:11:18 | MEDIUM | 3 |
| 2026-07-31 00:14:10 | MEDIUM | 3 |
| 2026-07-30 00:17:23 | MEDIUM | 3 |
| 2026-07-29 00:25:53 | MEDIUM | 3 |
| 2026-07-28 00:07:28 | MEDIUM | 3 |
| 2026-07-27 00:24:32 | MEDIUM | 3 |
| 2026-07-26 00:07:32 | MEDIUM | 3 |
| 2026-07-25 00:13:44 | MEDIUM | 3 |
| 2026-07-24 00:02:28 | MEDIUM | 3 |
| 2026-07-23 00:14:47 | MEDIUM | 3 |
| 2026-07-22 00:29:32 | MEDIUM | 3 |
| 2026-07-21 00:24:15 | MEDIUM | 3 |
| 2026-07-20 00:19:49 | MEDIUM | 3 |
| 2026-07-19 00:17:08 | MEDIUM | 3 |
| 2026-07-18 00:14:48 | MEDIUM | 3 |
| 2026-07-17 00:06:16 | MEDIUM | 3 |
| 2026-07-16 00:05:41 | MEDIUM | 3 |
| 2026-07-15 00:09:25 | MEDIUM | 3 |