{"record":{"id":"8bad78009b387bcd","repo":"shadow1ng/fscan","slug":"mssql-packet-too-large","errorCode":null,"errorMessage":"mssql: packet too large","messagePattern":"mssql: packet too large","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugins/services/mssql_raw.go","lineNumber":411,"sourceCode":"\treturn next, nil\n}\n\nfunc mssqlReadUSVarChar(payload []byte, pos int) (string, int, error) {\n\tif pos+2 > len(payload) {\n\t\treturn \"\", pos, fmt.Errorf(\"mssql: truncated us varchar\")\n\t}\n\tchars := int(binary.LittleEndian.Uint16(payload[pos : pos+2]))\n\tpos += 2\n\tsize := chars * 2\n\tif pos+size > len(payload) {\n\t\treturn \"\", pos, fmt.Errorf(\"mssql: invalid us varchar size\")\n\t}\n\treturn mssqlDecodeUCS2(payload[pos : pos+size]), pos + size, nil\n}\n\nfunc mssqlWritePacket(w io.Writer, packetType byte, payload []byte) error {\n\tif len(payload)+8 > 0xffff {\n\t\treturn fmt.Errorf(\"mssql: packet too large\")\n\t}\n\theader := []byte{packetType, tdsStatusEOM, 0, 0, 0, 0, 1, 0}\n\tbinary.BigEndian.PutUint16(header[2:4], uint16(len(payload)+8))\n\tif _, err := w.Write(header); err != nil {\n\t\treturn err\n\t}\n\t_, err := w.Write(payload)\n\treturn err\n}\n\nfunc mssqlReadMessage(r io.Reader) (byte, []byte, error) {\n\tvar packetType byte\n\tvar payload []byte\n\tfor {\n\t\theader := make([]byte, 8)\n\t\tif _, err := io.ReadFull(r, header); err != nil {\n\t\t\treturn 0, nil, err\n\t\t}","sourceCodeStart":393,"sourceCodeEnd":429,"githubUrl":"https://github.com/shadow1ng/fscan/blob/95cc12e753bf43de7004e5aef42a9ffba3934303/plugins/services/mssql_raw.go#L393-L429","documentation":"mssqlWritePacket serializes a whole TDS message into a single packet, whose 8-byte header stores the size as a 16-bit big-endian value (max 0xffff). If the payload plus the 8-byte header exceeds 65535 bytes, no valid single packet can be built and the write fails with this error.","triggerScenarios":"Calling mssqlSendPrelogin or mssqlSendLogin7 with a payload that, together with the 8-byte TDS header, exceeds 65535 bytes — e.g. an extremely long username/password or option data encoded in the login packet.","commonSituations":"Credentials containing enormous strings (fuzzed or misconfigured wordlist entries); building a prelogin/login with many long option entries; misuse of the low-level writer with an oversized buffer.","solutions":["Shorten the input: trim usernames, passwords, or option data sent in the login/prelogin payload.","Split the payload into multiple packets with EOM set only on the last one instead of one oversized packet.","Validate payload size before calling mssqlWritePacket (len(payload) <= 0xffff-8).","Reject pathological credential entries upstream in the brute-force wordlist loader."],"exampleFix":"// before\npayload := mssqlUCS2(user) + mssqlUCS2(pass) // can exceed 65527 bytes\nif err := mssqlWritePacket(w, tdsTypeLogin7, payload); err != nil { ... }\n// after\nif len(payload)+8 > 0xffff {\n    return fmt.Errorf(\"login payload too large: %d bytes\", len(payload))\n}\nif err := mssqlWritePacket(w, tdsTypeLogin7, payload); err != nil { ... }","handlingStrategy":"validation","validationCode":"if len(payload)+8 > 0xffff {\n    return fmt.Errorf(\"payload too large for single TDS packet: %d\", len(payload))\n}","typeGuard":null,"tryCatchPattern":"if err := mssqlWritePacket(w, pktType, payload); err != nil {\n    if strings.Contains(err.Error(), \"packet too large\") {\n        // split payload into multiple packets or shrink inputs\n    }\n}","preventionTips":["Check len(payload)+8 <= 0xffff before writing.","Trim long usernames/passwords before building login payloads.","Implement multi-packet framing if messages can legitimately exceed 64 KiB.","Sanitize wordlist entries to drop pathological oversized strings."],"tags":["mssql","tds","packet-size","protocol-limit"],"backgroundTag":"payload-too-large","analyzedSha":"95cc12e753bf43de7004e5aef42a9ffba3934303","analyzedAt":"2026-09-06T17:07:30.094Z","contentChangedAt":"2026-09-06T17:07:30.094Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}