Skip to content

Releases: alejadxr/AEGIS

AEGIS v1.7.27 — release pipeline fixed, installers back

Choose a tag to compare

@alejadxr alejadxr released this 23 Oct 14:30

Fixed — release pipeline

  • A unit test used TestClient(client=...), which the Starlette pinned in
    CI (0.41.3) does not support. CI failed from v1.7.25 on, and the release
    workflow skipped the desktop installers and the Docker images for
    v1.7.25 and v1.7.26. The test now sets the client address through a small
    ASGI wrapper; this release ships the missing artifacts, built on Node 22.

AEGIS v1.7.26 — Next.js 16.4.1, patched JS deps, Node 22 builds

Choose a tag to compare

@alejadxr alejadxr released this 23 Oct 13:10

Security — JavaScript advisories of October 2026

  • Dashboard on Next.js 16.4.1 (GHSA-673q-mjm6-r5xr, CVE-2026-96889,
    GHSA-p3m5-59mp-jv5r) and React 19.3.1. The repository declared Next 15
    while production already ran Next 16; both now match.
  • Transitive floors via overrides: body-parser 2.4.0 (CVE-2026-111181,
    one compressed request crashes the process), proxy-addr 2.0.8
    (GHSA-jqcg-44mw-7w3h, IP spoofing), undici 7.29+, sharp 0.35.5.
    npm audit --omit=dev goes from 2 critical / 18 high to 0 / 8; the
    remaining high are d3-color pulled by react-simple-maps.
  • The dashboard Docker image and CI build on Node 22. Node 20 is
    end-of-life and did not receive the October 2026 Node.js security
    release (CVE-2026-111497, the Brotli decoder RCE, and nine others).

AEGIS v1.7.25 — stops blocking its own operators, AI fallback and chat fixed

Choose a tag to compare

@alejadxr alejadxr released this 22 Oct 16:08

Fixed — AEGIS was blocking its own operators

  • HTTP brute force now counts only requests that submit credentials to an
    auth endpoint. Expired sessions polling the API from several browsers
    behind one office NAT used to cross the threshold and get the office
    blocked. SSH thresholds are unchanged.
  • Behavioural CVE rules that matched generic paths on request rhythm alone
    are scoped to the product's real URLs (Dell RecoverPoint, ScreenConnect,
    Kentico, Kestra, Cobalt Strike default URIs, Kubernetes API) or demoted to
    low when the advisories name no URL. The RecoverPoint rule fired on any
    /api/admin panel. Validated by replaying a week of real traffic.

Fixed — dashboard and AI

  • The IP-block 403 now carries CORS headers for allowed origins, and the
    dashboard says the network is blocked instead of showing a CORS error.
  • The Ask-AI chat returned 404: its router was mounted without /api/v1
    since v1.1.0.
  • AI fallback: a gateway-specific model id was forwarded to the next
    provider, which rejected it, so a down primary took the whole chain with
    it. Each provider now gets its own model, and a total AI outage is logged
    as one rate-limited ERROR.

AEGIS v1.7.24 — honeypot blocks authenticated, certifi pinned

Choose a tag to compare

@alejadxr alejadxr released this 22 Oct 15:20

Fixed — honeypot blocks were refused by the firewall agent

  • The Pi honeypot never sent X-AEGIS-FW-Auth, so since v1.7.17 every block
    it asked for was rejected with 401. It now sends the shared secret
    (AEGIS_FIREWALL_SECRET) plus force, threat type, severity and duration,
    and logs a rejection as REJECTED ... check AEGIS_FIREWALL_SECRET.

Changed

  • pi-deploy/README-honeypot.md documents the recommended layout: the decoy
    on its own Pi, forwarding blocks to the gateway Pi's agent.

Security

  • Require certifi >= 2026.10.19 in the backend and the firewall agent,
    which drops the compromised eMudhra/emSign roots (GHSA-6q48-6c7w-9gw2).

AEGIS v1.7.23 — firewall agent in sync, guard covers https/http2

Choose a tag to compare

@alejadxr alejadxr released this 22 Oct 13:26

Fixed — confirmed blocks were deferred by the firewall agent

  • The firewall agent requires evidence before blocking (an exploit signature
    or a repeat sighting). AEGIS sent only the IP, so blocks that had already
    passed guardrails were deferred as "unclassified". The responder, playbooks
    and the DoS shield now send reason, threat type, severity and force.

Changed — firewall agent in sync with production

  • The evidence gate (AEGIS_BLOCK_MIN_ATTEMPTS, default 2) and persisted
    per-IP block reasons, previously only hot-patched on the device, are now in
    firewall-agent/. The stale duplicate pi-deploy/aegis-firewall/main.py
    is removed.

Security

  • Brotli guard (CVE-2026-111497) now also covers https and http2 servers
    and parses Content-Encoding robustly; new test-node-brotli-guard.cjs
    (53 checks) passes on Node 20.10, 20.18, 22.15 and 25.6.
  • The honeypot unit template takes AEGIS_API_URL/AEGIS_API_KEY from a
    root-only EnvironmentFile instead of inline values readable by any user.

AEGIS v1.7.22 — Node.js Brotli RCE guard (CVE-2026-111497)

Choose a tag to compare

@alejadxr alejadxr released this 22 Oct 13:12

Added — virtual patch for Node.js CVE-2026-111497 (Brotli RCE)

  • Node.js 22.x/24.x/26.x before 22.23.4/24.22.1/26.12.1 (and every EOL 20.x)
    have an out-of-bounds write in the Brotli decoder that allows remote code
    execution from crafted compressed data. deploy/guards/node-brotli-guard.cjs
    protects Node processes until the runtime is upgraded. Load it with
    NODE_OPTIONS="--require /path/to/node-brotli-guard.cjs":
    • Brotli decompression is refused (zlib sync/async/stream APIs and the
      BrotliDecompress class); streams fail cleanly instead of throwing, so
      fetch() rejects without crashing the process.
    • Outbound requests stop asking for Brotli: fetch() defaults to
      gzip, deflate and br is stripped from Accept-Encoding on
      http(s).request/get and ClientRequest.setHeader (axios, got, node-fetch
      keep working against servers that support Brotli).
    • Incoming HTTP requests with Content-Encoding: br are answered 415
      before any body parser runs.
    • Compression and gzip are untouched; AEGIS_BROTLI_GUARD=off disables it.
  • Verified on Node 20.10/20.18 across 10 production Node apps (Next.js,
    Express, cron workers): all stayed online, Brotli request bodies got 415.

AEGIS v1.7.21 — no more CPU bursts

Choose a tag to compare

@alejadxr alejadxr released this 09 Oct 19:56

v1.7.20 fixed the memory leak on endpoint uploads; the API still showed
30-45 s bursts at 100% CPU every few minutes. Two more causes, both fixed.

Fixed — chain evaluation reloaded the process index for every event

  • The in-process host monitor emits ~30 process events a minute and each
    one reloaded up to 5000 rows. A bounded per-agent process index is now
    kept in memory, loaded once and refreshed on a TTL or a rate-limited miss.
    300 events: 300 loads and 17.5 s before, 1 load and 0.07 s after.

Fixed — rewritten logs were replayed from the start

  • An access logger that trims its file by rewriting it in place made the
    tail replay megabytes of already-processed lines, flooding the event
    queue. The tail now works on true byte offsets and resumes right after the
    last processed line on any truncation or rotation. Text-mode tell()
    (an opaque cookie on multi-byte UTF-8) is no longer used for this check.

Result in production

  • 20 minutes after deploy: no CPU bursts, memory flat at ~400 MB, zero
    queue overflows, and a real log rewrite resumed at the right byte.

AEGIS v1.7.20 — no more memory leak under endpoint telemetry

Choose a tag to compare

@alejadxr alejadxr released this 09 Oct 04:25

Fixed — the API leaked memory and CPU under endpoint telemetry

  • Every event in an EDR batch (up to 5000) rebuilt the process tree with a
    query that loaded up to 5000 full rows and kept them in the request's
    database session. With a busy endpoint the API grew from 0.5 GB to 2-5 GB
    within minutes at 100% CPU and was restarted by its process manager over
    200 times in a day. The process index is now built once per batch from a
    column-only query and updated in memory; ancestry lookups never hit the
    database. A 2000-event batch went from minutes to under a second in tests;
    in production memory stays flat at ~400 MB.

Changed — the public-repo guard

  • The pre-commit hook blocks agent and environment files by name (even with
    git add -f), uses shape-only patterns, reads operator-specific patterns
    from an untracked local file, and covers the full 100.64.0.0/10 range. A CI
    job runs the same checks on the tracked tree, so a clone without the hook or
    a --no-verify commit still fails the build.

AEGIS v1.7.19 — secret-file probing detected, detection liveness

Choose a tag to compare

@alejadxr alejadxr released this 05 Oct 17:39

Added — secret-file probing is detected on every tailed app

  • Scanners requesting /.env, /.git/, /.aws/, /.ssh/, wp-config,
    phpinfo and similar on apps behind the tunnel produced no incident: no rule
    covered those paths for tailed logs, and the inline detector only runs in the
    API middleware. In two days, ~270 such probes from five addresses went
    unrecorded. New rule sigma_web_sensitive_file_probe (high) fires on three
    or more such paths from one source within five minutes.

Added — detection can no longer fail silently

  • log_watcher and the correlation engine count lines read and processed,
    events published and rules fired, with last-activity timestamps, on
    GET /health/detection and in /health.
  • A watchdog restarts the tail task if watched files grow but nothing is read
    for AEGIS_TAIL_STALL_MINUTES (default 5).
  • In-place truncation (copytruncate) now rewinds the read offset.

AEGIS v1.7.18 — no more cloud blind spot

Choose a tag to compare

@alejadxr alejadxr released this 03 Oct 17:37

Security — attackers on Google Cloud and Azure were invisible

  • 34.64.0.0/10 (~4M Google Cloud addresses), 35.190.0.0/17 and
    13.66.0.0/17 were treated as safe on every detection path to avoid
    crawler false positives, so any attacker renting a VM there was never
    detected or blocked. Precise crawler ranges (Googlebot, Bing, Meta,
    Twitter, Apple) stay unconditionally safe. A shared-cloud address is safe
    only when it presents a crawler User-Agent and its forward-confirmed
    reverse DNS ends in googlebot.com, google.com or search.msn.com (verified in
    the background, cached). A spoofed Googlebot User-Agent from a cloud VM now
    gets normal detection.
  • The firewall agent ignores broad AEGIS_SAFE_IPS entries over these ranges.