circle
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:10
source=(https://www.circle-lang.org/linux/build_`curl 'https://www.circle-lang.org/linux/?C=M;O=D' -s | grep -Po '(?<=build_(?!latest)).+?(?=\.tgz)' | head -1`.tgz)
llm_review
An AI model (anthropic/claude-4.6-sonnet-20260217) reviewed this and agrees it is MEDIUM (confidence 82%): This PKGBUILD downloads a prebuilt closed-source binary compiler from circle-lang.org (the official upstream vendor site for the Circle C++ compiler), but does so via a dynamically constructed URL that scrapes the directory listing at build time to find the latest build number. Two real concerns exist: (1) The checksum is SKIP, so there is no integrity verification of the downloaded binary. (2) The URL is constructed by executing curl and parsing HTML at makepkg time, meaning a compromised or MITM'd circle-lang.org could serve a different binary without detection. The host itself (circle-lang.org) is the legitimate upstream for this compiler, so this is not an unofficial/personal host, but the dynamic URL construction combined with SKIP checksum and execution of a prebuilt binary creates a genuine supply-chain risk. The pkgver() function also executes the downloaded binary (./circle -version) before the package() step, meaning arbitrary code from the downloaded tarball runs during the build. This is a real medium-severity concern: not clearly malicious, but a prebuilt binary executed with no integrity check from a host that, while official, could be compromised or subject to MITM.
PKGBUILD
1 offending line(s) highlighted# Maintainer: <tjmnkrajyej at gmail dot com>
pkgname=circle
pkgver=1.0.0_200
pkgrel=1
pkgdesc='a C++ compiler with many novel language features'
arch=(x86_64)
url=https://circle-lang.org
license=(custom)
depends=('gcc>=10.2')
source=(https://www.circle-lang.org/linux/build_`curl 'https://www.circle-lang.org/linux/?C=M;O=D' -s | grep -Po '(?<=build_(?!latest)).+?(?=\.tgz)' | head -1`.tgz)
sha256sums=(SKIP)
prepare() {
mkdir -p libedit
ln -sf /usr/lib/libedit.so libedit/libedit.so.2
}
pkgver() {
LD_LIBRARY_PATH=libedit ./circle -version | head -1 | grep -Po '(?<=version ).+' | sed 's/-/_/g'
}
package() {
ln -sf /usr/lib/libedit.so
install -D libedit.so "$pkgdir/usr/lib/libedit.so.2"
install -Dm 755 circle "$pkgdir/usr/bin/circle"
install -Dm 664 license.txt "$pkgdir/usr/share/licenses/$pkgname/license.txt"
}
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 |