Open Splinter1984 opened 1 week ago
In RTPS protocol, during DataPacketField calculation of payload length assume that inlineQos has no data. Which leads to wrong payload length, as result incorrect packet interpretation. The following PR resolve the issue:
RTPS
DataPacketField
payload
inlineQos
6f0faf38597080daca367d741903a99464e32760
3.10.12
Ubuntu 20.04
No response
The following test case able to reproduce the issue.
p0 = RTPS( protocolVersion=ProtocolVersionPacket(major=2, minor=2), vendorId=VendorIdPacket(vendor_id=0x010f), guidPrefix=GUIDPrefixPacket( hostId=0x010f45d2, appId=0xb3f558b9, instanceId=0x01000000 ),magic=b"RTPS" )/RTPSMessage(submessages=[ RTPSSubMessage_INFO_TS( submessageId=9, submessageFlags=1, octetsToNextHeader=8, ts_seconds=1638425814, ts_fraction=2083784982, ), RTPSSubMessage_DATA( submessageId= 0x15, submessageFlags= 0x7, octetsToNextHeader= 54, extraFlags= 0x0, octetsToInlineQoS= 16, readerEntityIdKey= 0x0, readerEntityIdKind= 0x0, writerEntityIdKey= 0x0, writerEntityIdKind= 0x0, writerSeqNumHi= 0, writerSeqNumLow= 4, inlineQoS= InlineQoSPacket( parameters= [ PID_UNKNOWN( parameterId= 0x801e, parameterLength= 4, parameterData= b'\x00\x00\x00\x00', ), ], sentinel= PID_SENTINEL( parameterId= 0x1, parameterLength= 0, parameterData= b'', ), ), data= DataPacket( encapsulationKind= 0x1, encapsulationOptions= 0x3, serializedData= b'=\x00\x00\x00abcdefghij\x00\x00\x00\x00', ), ), RTPSSubMessage_INFO_TS( submessageId=9, submessageFlags=1, octetsToNextHeader=8, ts_seconds=1638425814, ts_fraction=2083784982, ), RTPSSubMessage_DATA( submessageId= 0x15, submessageFlags= 0x7, octetsToNextHeader= 54, extraFlags= 0x0, octetsToInlineQoS= 16, readerEntityIdKey= 0x0, readerEntityIdKind= 0x0, writerEntityIdKey= 0x0, writerEntityIdKind= 0x0, writerSeqNumHi= 0, writerSeqNumLow= 4, inlineQoS= InlineQoSPacket( parameters= [ PID_UNKNOWN( parameterId= 0x801e, parameterLength= 4, parameterData= b'\x00\x00\x00\x00', ), ], sentinel= PID_SENTINEL( parameterId= 0x1, parameterLength= 0, parameterData= b'', ), ), data= DataPacket( encapsulationKind= 0x1, encapsulationOptions= 0x3, serializedData= b'=\x00\x00\x00abcdefghij\x00\x00\x00\x00', ), ), ]) d = b"\x52\x54\x50\x53\x02\x02\x01\x0f\x01\x0f\x45\xd2\xb3\xf5\x58\xb9" \ b"\x01\x00\x00\x00\x09\x01\x08\x00\xd6\x64\xa8\x61\x16\x09\x34\x7c" \ b"\x15\x07\x36\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00" \ b"\x00\x00\x00\x00\x04\x00\x00\x00\x1e\x80\x04\x00\x00\x00\x00\x00" \ b"\x01\x00\x00\x00\x00\x01\x00\x03\x3d\x00\x00\x00\x61\x62\x63\x64" \ b"\x65\x66\x67\x68\x69\x6a\x00\x00\x00\x00\x09\x01\x08\x00\xd6\x64" \ b"\xa8\x61\x16\x09\x34\x7c\x15\x07\x36\x00\x00\x00\x10\x00\x00\x00" \ b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x1e\x80" \ b"\x04\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x01\x00\x03\x3d\x00" \ b"\x00\x00\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x00\x00\x00\x00" assert RTPS(d) == p0
Brief description
In
RTPS
protocol, duringDataPacketField
calculation ofpayload
length assume thatinlineQos
has no data. Which leads to wrongpayload
length, as result incorrect packet interpretation. The following PR resolve the issue:Scapy version
6f0faf38597080daca367d741903a99464e32760
Python version
3.10.12
Operating system
Ubuntu 20.04
Additional environment information
No response
How to reproduce
The following test case able to reproduce the issue.
Actual result
No response
Expected result
No response
Related resources
No response