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, nil

View on GitHub (pinned to 265b3a3dec)

Solutions

  1. Verify the outgoing message is a correctly encoded Kerberos PDU
  2. Check whether a security device is resetting TCP/88 flows
  3. 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

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


AI-assisted analysis of projectdiscovery/nuclei@265b3a3dec (2026-08-15). Data as JSON: /api/errors/fedb87880f581ff1. Report an issue: GitHub.