Compare commits

..

3 Commits

Author SHA1 Message Date
Xe Iaso d6d6e04024 docs: update CHANGELOG
Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-10-29 15:50:36 -04:00
Xe Iaso d9d5d2312e fix(lib): close open redirect when in subrequest mode
Closes GHSA-cf57-c578-7jvv

Previously Anubis had an open redirect in subrequest auth mode due to an
insufficent fix in GHSA-jhjj-2g64-px7c. This patch adds additional
validation at several steps of the flow to prevent open redirects in
subrequest auth mode as well as implements automated testing to prevent
this from occuring in the future.
2025-10-29 15:48:09 -04:00
Xe Iaso cc45c5c135 test(nginx-external-auth): bring up to code standards
Signed-off-by: Xe Iaso <me@xeiaso.net>
2025-10-29 14:36:06 -04:00
11 changed files with 5 additions and 78 deletions
-1
View File
@@ -23,7 +23,6 @@ jobs:
- i18n
- palemoon/amd64
#- palemoon/i386
- robots_txt
runs-on: ubuntu-latest
steps:
- name: Checkout code
+1 -1
View File
@@ -1 +1 @@
1.23.0
1.23.0-pre2
+1
View File
@@ -4,3 +4,4 @@
- import: (data)/bots/custom-async-http-client.yaml
- import: (data)/crawlers/alibaba-cloud.yaml
- import: (data)/crawlers/huawei-cloud.yaml
- import: (data)/crawlers/tencent-cloud.yaml
-3
View File
@@ -13,9 +13,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
<!-- This changes the project to: -->
- Fix `SERVE_ROBOTS_TXT` setting file after the double slash fix broke it.
- Remove the default configuration rule to block Tencent cloud. If users see abuse from Tencent cloud IP ranges, please contact abuse@tencent.com and mention that you are using Anubis to protect your services. Please include source IP address, source port, timestamp, target IP address, target port, request headers (including the User-Agent header), and target endpoints/patterns.
## v1.23.0: Lyse Hext
- Add default tencent cloud DENY rule.
-9
View File
@@ -345,15 +345,6 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
return
}
// Forward robots.txt requests to mux when ServeRobotsTXT is enabled
if s.opts.ServeRobotsTXT {
path := strings.TrimPrefix(r.URL.Path, anubis.BasePrefix)
if path == "/robots.txt" || path == "/.well-known/robots.txt" {
s.mux.ServeHTTP(w, r)
return
}
}
s.maybeReverseProxyOrPage(w, r)
}
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "@techaro/anubis",
"version": "1.23.0",
"version": "1.23.0-pre2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@techaro/anubis",
"version": "1.23.0",
"version": "1.23.0-pre2",
"license": "ISC",
"dependencies": {
"@aws-crypto/sha256-js": "^5.2.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@techaro/anubis",
"version": "1.23.0",
"version": "1.23.0-pre2",
"description": "",
"main": "index.js",
"scripts": {
-8
View File
@@ -1,8 +0,0 @@
bots:
- name: challenge
user_agent_regex: CHALLENGE
action: CHALLENGE
status_codes:
CHALLENGE: 200
DENY: 403
-27
View File
@@ -1,27 +0,0 @@
async function getRobotsTxt() {
return fetch("http://localhost:8923/robots.txt", {
headers: {
"Accept-Language": "en",
"User-Agent": "Mozilla/5.0",
}
})
.then(resp => {
if (resp.status !== 200) {
throw new Error(`wanted status 200, got status: ${resp.status}`);
}
return resp;
})
.then(resp => resp.text());
}
(async () => {
const page = await getRobotsTxt();
if (page.includes(`<html>`)) {
console.log(page)
throw new Error("serve robots.txt smoke test failed");
}
console.log("serve-robots-txt serves robots.txt");
process.exit(0);
})();
-24
View File
@@ -1,24 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
function cleanup() {
pkill -P $$
}
trap cleanup EXIT SIGINT
# Build static assets
(cd ../.. && npm ci && npm run assets)
go tool anubis --help 2>/dev/null || :
go run ../cmd/unixhttpd &
go tool anubis \
--policy-fname ./anubis.yaml \
--use-remote-address \
--serve-robots-txt \
--target=unix://$(pwd)/unixhttpd.sock &
backoff-retry node ./test.mjs
-2
View File
@@ -1,2 +0,0 @@
*
!.gitignore