fix(server): add read deadline and size limit to control plane handshake
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- go
- Ambito
- networking, security
Direzione di ricerca
Inizia in internal/server/server.go, in corrispondenza di handleControlConnection, e controlla il percorso esistente di decodifica dell’handshake. Aggiungi la scadenza e il limite di dimensione descritti nell’issue, poi cerca o aggiungi test unitari per la gestione dell’handshake. Il lavoro è completato quando gli handshake lenti e troppo grandi vengono rifiutati correttamente e la scadenza viene reimpostata per le connessioni di lunga durata.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
In internal/server/server.go (handleControlConnection), the control plane listener accepts raw TCP sockets on port 7890 and immediately decodes the handshake payload:
func (s *Server) handleControlConnection(conn net.Conn) {
var req protocol.TunnelRequest
if err := json.NewDecoder(conn).Decode(&req); err != nil {
conn.Close()
return
}
Problem & Impact
- Slowloris DoS: There is no read deadline on
conn(conn.SetReadDeadline). A client can open a TCP connection and send 1 byte every few minutes. The server goroutine will remain blocked onDecodeindefinitely, leaking goroutines and file descriptors. - Unbounded Memory Allocation (OOM): There is no limit on the bytes read from
connbefore parsing JSON. A malicious actor can stream an infinite string (e.g.{"Subdomain": "aaaa...) without closing quotes, forcing the server to buffer into RAM until an Out-Of-Memory (OOM) crash occurs.
Proposed Solution
- Set a reasonable read deadline (e.g. 5 seconds) before decoding the initial handshake.
- Wrap
connin anio.LimitReader(e.g. 4KB maximum handshake size) to reject oversized or streaming payloads:
_ = conn.SetReadDeadline(time.Now().Add(5 * time.Second))
limitedReader := io.LimitReader(conn, 4096)
if err := json.NewDecoder(limitedReader).Decode(&req); err != nil {
conn.Close()
return
}
_ = conn.SetReadDeadline(time.Time{}) // reset deadline for long-lived control connection
Acceptance Criteria
- Add 5-second read timeout on initial handshake on port 7890.
- Restrict handshake payload size to 4KB with
io.LimitReader. - Add unit test verifying timeouts and oversized payloads are rejected cleanly.
- Lingua principale
- Go
- Stelle
- 9
- Fork
- 1
- Merge medio
- 5h 57m
- PR unite (30g)
- 15
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di kernelshard/expose
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
kernelshard/expose#71 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
kernelshard/expose#62 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
kernelshard/expose#58 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
kernelshard/expose#35 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
kernelshard/expose#80 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di kernelshard/expose
Issue simili
-
documentation hacktoberfest priority: low skill: good first issue status: ready for dev
Difficoltà 2/5 Mezza giornata Idoneità per principianti 85/100
hyperledger-labs/fabric-smart-client#2142 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
numberly/vault-db-injector#107 ·
I maintainer di solito rispondono entro 1 giorno
-
area/import kind/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno
-
[DOC] Wrong sg_egress_ports range in the Terraform Databricks Guide for AWS Hub & Spoke with Network FirewallForse già presa @akhil9tiet l’ha presa oggi. Apertadocs
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
databricks/terraform-provider-databricks#6080 · 1 commento ·
I maintainer di solito rispondono entro 3 giorni
-
kind/documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
kubernetes-sigs/dra-driver-nvidia-gpu#1569 ·
I maintainer di solito rispondono entro 1 giorno