projectdiscovery/nuclei · error
error sending to KDC (%s): %v
Error message
error sending to KDC (%s): %v
What it means
The innermost TCP send in sendTCP failed at conn.Write: after dialing a KDC successfully, writing the length-prefixed message (RFC 4120 7.2.2 4-byte big-endian length plus body) failed. The remote address is included in the message. The error propagates into the per-KDC list aggregated by sendToKDCTcp.
Source
Thrown at pkg/js/libs/kerberos/sendtokdc.go:183
return r, fmt.Errorf("no response data from %s", conn.RemoteAddr().String())
}
return r, nil
}
// sendTCP sends bytes to connection over TCP.
func sendTCP(conn *net.TCPConn, b []byte) ([]byte, error) {
defer func() {
_ = conn.Close()
}()
var r []byte
// RFC 4120 7.2.2 specifies the first 4 bytes indicate the length of the message in big endian order.
hb := make([]byte, 4)
binary.BigEndian.PutUint32(hb, uint32(len(b)))
b = append(hb, b...)
_, err := conn.Write(b)
if err != nil {
return r, fmt.Errorf("error sending to KDC (%s): %v", conn.RemoteAddr().String(), err)
}
sh := make([]byte, 4)
_, err = conn.Read(sh)
if err != nil {
return r, fmt.Errorf("error reading response size header: %v", err)
}
s := binary.BigEndian.Uint32(sh)
rb := make([]byte, s)
_, err = io.ReadFull(conn, rb)
if err != nil {
return r, fmt.Errorf("error reading response: %v", err)
}
if len(rb) < 1 {
return r, fmt.Errorf("no response data from KDC %s", conn.RemoteAddr().String())
}
return rb, nilView on GitHub (pinned to 265b3a3dec)
Solutions
- Verify the outgoing message is a correctly encoded Kerberos PDU
- Check whether a security device is resetting TCP/88 flows
- Retry; a fresh dial often succeeds after a transient reset
Defensive patterns
Strategy: retry
Try / catch
try {
const resp = kerberos.SendToKDC(client, msg);
} catch (e) {
// TCP write to the KDC in the message failed: check for RST-injecting middleboxes and message encoding
} Prevention
- Validate the Kerberos PDU encoding before sending
- Watch for IPS devices resetting TCP/88 flows
When it happens
Trigger: The KDC reset the connection immediately after accept (some drop malformed AS-REQ/TGS-REQ this way); a middlebox RST-ing the flow; the connection torn down between dial and write.
Common situations: IDS/IPS sending resets for Kerberos traffic; KDCs that close connections from untrusted sources; race between dialer pool reuse and server-side timeouts.
Related errors
- error sending to a KDC: %s
- error reading response: %v
- dialers not initialized for %s
- error sending to (%s): %v
- sending over UDP failed to %s: %v
AI-assisted analysis of projectdiscovery/nuclei@265b3a3dec (2026-08-15).
Data as JSON: /api/errors/fedb87880f581ff1.
Report an issue: GitHub.