aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2025-03-31 18:27:01 -0400
committerGitHub <noreply@github.com>2025-03-31 18:27:01 -0400
commitf844fffd1ebd4178292df09ce181ad0d6db4038f (patch)
tree3e6c8beed46530575703aa523b95eec7a0862587
parent4b8efcba9bec96f03e55ce3151cf02c0f269ca02 (diff)
downloadanubis-f844fffd1ebd4178292df09ce181ad0d6db4038f.tar.xz
anubis-f844fffd1ebd4178292df09ce181ad0d6db4038f.zip
v1.15.1: Zenos yae Galvus: Echo 1 (#181)v1.15.1
* version 1.15.0 (#144) Signed-off-by: Xe Iaso <me@xeiaso.net> * cmd/anubis actually check the result with the correct difficulty Signed-off-by: Xe Iaso <me@xeiaso.net> * v1.15.1: Zenos yae Galvus: Echo 1 Signed-off-by: Xe Iaso <me@xeiaso.net> --------- Signed-off-by: Xe Iaso <me@xeiaso.net> Co-authored-by: Henri Vasserman <henv@hot.ee>
-rw-r--r--VERSION2
-rw-r--r--docs/docs/CHANGELOG.md12
-rw-r--r--lib/anubis.go19
3 files changed, 22 insertions, 11 deletions
diff --git a/VERSION b/VERSION
index 141f2e8..ace4423 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.15.0
+1.15.1
diff --git a/docs/docs/CHANGELOG.md b/docs/docs/CHANGELOG.md
index 86c728f..d2a6498 100644
--- a/docs/docs/CHANGELOG.md
+++ b/docs/docs/CHANGELOG.md
@@ -11,6 +11,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## v1.15.1
+
+Zenos yae Galvus: Echo 1
+
+Fixes a recurrence of [CVE-2025-24369](https://github.com/Xe/x/security/advisories/GHSA-56w8-8ppj-2p4f)
+due to an incorrect logic change in a refactor. This allows an attacker to mint a valid
+access token by passing any SHA-256 hash instead of one that matches the proof-of-work
+test.
+
+This case has been added as a regression test. It was not when CVE-2025-24369 was released
+due to the project not having the maturity required to enable this kind of regression testing.
+
## v1.15.0
Zenos yae Galvus
diff --git a/lib/anubis.go b/lib/anubis.go
index 83e04dd..026f912 100644
--- a/lib/anubis.go
+++ b/lib/anubis.go
@@ -145,14 +145,13 @@ func New(opts Options) (*Server, error) {
}
type Server struct {
- mux *http.ServeMux
- next http.Handler
- priv ed25519.PrivateKey
- pub ed25519.PublicKey
- policy *policy.ParsedConfig
- opts Options
- DNSBLCache *decaymap.Impl[string, dnsbl.DroneBLResponse]
- ChallengeDifficulty int
+ mux *http.ServeMux
+ next http.Handler
+ priv ed25519.PrivateKey
+ pub ed25519.PublicKey
+ policy *policy.ParsedConfig
+ opts Options
+ DNSBLCache *decaymap.Impl[string, dnsbl.DroneBLResponse]
}
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
@@ -428,9 +427,9 @@ func (s *Server) PassChallenge(w http.ResponseWriter, r *http.Request) {
}
// compare the leading zeroes
- if !strings.HasPrefix(response, strings.Repeat("0", s.ChallengeDifficulty)) {
+ if !strings.HasPrefix(response, strings.Repeat("0", rule.Challenge.Difficulty)) {
s.ClearCookie(w)
- lg.Debug("difficulty check failed", "response", response, "difficulty", s.ChallengeDifficulty)
+ lg.Debug("difficulty check failed", "response", response, "difficulty", rule.Challenge.Difficulty)
templ.Handler(web.Base("Oh noes!", web.ErrorPage("invalid response")), templ.WithStatus(http.StatusForbidden)).ServeHTTP(w, r)
failedValidations.Inc()
return