writefull-bin
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:17
source_i686=("https://s3-eu-west-1.amazonaws.com/writefull-binaries/${_ver}/writefull_${_ver}_ia32.zip")
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 72%): This PKGBUILD downloads and installs prebuilt binaries (an Electron/Chromium-based app) from an S3 bucket (s3-eu-west-1.amazonaws.com/writefull-binaries). While S3 is a legitimate hosting platform, this is the vendor's own S3 bucket rather than an official distribution channel like a vendor's own domain or a well-known package registry. The binaries are executed code installed to /opt and /usr/bin. The sha256sums are pinned, which mitigates substitution attacks at the transport layer, but S3 bucket ownership can change, be misconfigured, or be taken over. The package is also quite old (version 3.0.0-beta19), and the vendor's S3 bucket may no longer be maintained or could be repurposed. This is a classic medium-risk pattern: prebuilt proprietary binaries from a non-canonical host with checksums present but no additional verification (e.g., GPG signature). The cheaper model's assessment is correct here — this is a genuine medium supply-chain concern, not a false positive.
PKGBUILD
1 offending line(s) highlighted# Maintainer: Filipe Laíns (FFY00) <fiilipe.lains@gmail.com>
# Contributor: Shameempk <mailtoshameempk@gmail.com>
pkgname=writefull-bin
_pkgname=${pkgname%-bin}
_rver=3.0.0
_bver=19
pkgver=${_rver}_beta$_bver
pkgrel=2
pkgdesc="App that gives feedback on your writing."
arch=('i686' 'x86_64')
url="http://writefullapp.com/"
license=('MIT' 'custom:Chromium')
makedepends=('imagemagick')
provides=('writefull')
conflicts=('writefull')
_ver=$_rver-beta$_bver
source_i686=("https://s3-eu-west-1.amazonaws.com/writefull-binaries/${_ver}/writefull_${_ver}_ia32.zip")
source_x86_64=("https://s3-eu-west-1.amazonaws.com/writefull-binaries/${_ver}/writefull_${_ver}_amd64.zip")
sha256sums_i686=('43e2237729e4b6eb267dd70ebb0aacc42a4a3ad6a97a5a5e38bab35b3eb7ad84')
sha256sums_x86_64=('6fdc2b8bcf93c972f4691c244c3a6bcc5ba6ee6bad76e163c889a1aacedc7c39')
if [ "$(uname -m)" = "x86_64" ]; then
_arch=amd64
_arch_dir=x64
elif [ "$(uname -m)" = "i686" ]; then
_arch=ia32
_arch_dir=ia32
fi
package() {
install -dm 755 "$pkgdir"/opt/$_pkgname
cp -dr --no-preserve=ownership "$srcdir"/Writefull-linux-$_arch_dir/* "$pkgdir"/opt/$_pkgname
convert "$pkgdir"/opt/$_pkgname/Writefull.ico "$pkgdir"/opt/$_pkgname/Writefull.png
install -Dm 644 "$pkgdir"/opt/$_pkgname/Writefull-0.png "$pkgdir"/opt/pixmaps/writefull.png
sed -i 's|Icon=.*$|Icon=/opt/pixmaps/writefull.png|g' "$pkgdir"/opt/$_pkgname/writefull.desktop
sed -i 's|Exec=.*$|Exec=writefull|g' "$pkgdir"/opt/$_pkgname/writefull.desktop
install -Dm 755 "$pkgdir"/opt/$_pkgname/writefull.desktop "$pkgdir"/usr/share/applications/Writefull.desktop
rm "$pkgdir"/opt/$_pkgname/Writefull.ico
rm "$pkgdir"/opt/$_pkgname/Writefull-*.png
rm "$pkgdir"/opt/$_pkgname/writefull.desktop
install -dm 644 "$pkgdir"/usr/share/licenses/$pkgname
ln -s "$pkgdir"/opt/$_pkgname/LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE
ln -s "$pkgdir"/opt/$_pkgname/LICENSES.chromium.html "$pkgdir"/usr/share/licenses/$pkgname/LICENSES.chromium.html
install -dm 755 "$pkgdir"/usr/bin
ln -s /opt/$_pkgname/Writefull "$pkgdir"/usr/bin/writefull
}
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 |