Plugin Caddy Defender przed wersją 0.10.1 nieprawidłowo weryfikował adres IP klienta, używając adresu bezpośredniego połączenia zamiast rzeczywistego adresu źródłowego. W efekcie klienci z zablokowanych zakresów IP mogli ominąć blokadę, gdy ruch przechodził przez zaufany proxy, CDN lub load balancer.
▸ Pokaż oryginał (EN)
The Caddy Defender plugin is a middleware for Caddy that allows users to block or manipulate requests based on the client's IP address. Prior to version 0.10.1, Caddy Defender used `r.RemoteAddr` when evaluating whether a request should be blocked. `RemoteAddr` is the address of the immediate peer connected to Caddy. In deployments where Caddy is behind a trusted proxy, CDN, or load balancer, the immediate peer is usually the proxy, not the original client. Caddy resolves the original client address into its `client_ip` request variable after applying the configured `trusted_proxies` policy, but Defender did not use that value. As a result, clients from blocked IP ranges could bypass Defender when accessing Caddy through a trusted proxy whose own IP address was not blocked. This affects deployments that use Defender behind trusted proxies and expect it to enforce blocking based on the real client IP. The issue is fixed in version 0.10.1 by making Defender prefer Caddys resolved `client_ip` request variable when it is available. Defender falls back to `RemoteAddr` only when Caddy has not provided a resolved client IP. There is no complete workaround in affected Defender versions for deployments that rely on Caddy's trusted proxy client IP resolution. Until upgrading, affected users should enforce equivalent IP blocking at the trusted proxy, CDN, load balancer, firewall, or other edge layer before traffic reaches Caddy. Deployments where Caddy receives traffic directly from clients, without an intermediate trusted proxy, are not affected by this bypass.
Caddy Defender używał pola `r.RemoteAddr` do oceny, czy żądanie powinno być zablokowane. W środowiskach, gdzie Caddy działa za zaufanym proxy, `RemoteAddr` wskazuje na adres IP serwera pośredniczącego, a nie rzeczywistego klienta. Caddy udostępnia rzeczywisty adres klienta w zmiennej `client_ip` po zastosowaniu polityki `trusted_proxies`, jednak Defender tej zmiennej nie wykorzystywał. W konsekwencji klient pochodzący z zablokowanego zakresu IP mógł uzyskać dostęp, jeżeli jego żądanie przechodziło przez proxy, którego adres IP nie był zablokowany.
Atakujący może ominąć reguły blokowania oparte na adresach IP skonfigurowane w Caddy Defender, uzyskując nieautoryzowany dostęp do zasobów chronionych przez ten mechanizm. Obejście dotyczy wyłącznie reguł opartych na IP — nie wpływa na inne mechanizmy uwierzytelniania ani autoryzacji.
Należy zaktualizować plugin Caddy Defender do wersji 0.10.1 lub nowszej, która poprawnie odczytuje zmienna `client_ip` rozwiązaną przez Caddy. Do czasu aktualizacji należy wdrożyć równoważne reguły blokowania IP na poziomie zaufanego proxy, CDN, load balancera, firewall lub innej warstwy brzegowej przed ruchem docierającym do Caddy. Wdrożenia, w których Caddy odbiera ruch bezpośrednio od klientów bez pośredniego proxy, nie są podatne.
Plugin Caddy Defender w wersjach przed 0.10.1, w środowiskach, gdzie Caddy działa za zaufanym proxy, CDN lub load balancerem, a Defender ma skonfigurowane reguły blokowania bazujące na adresach IP klientów.
Podatność nie dotyczy wdrożeń, w których Caddy odbiera ruch bezpośrednio od klientów bez żadnego pośredniego zaufanego proxy. Brak pełnego obejścia po stronie samego pluginu Defender — jedyną skuteczną mitigacją przed aktualizacją jest blokada IP na warstwie infrastruktury sieciowej.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:N