def test_cve_2019_6474(): # This test verifies two issues uncovered in CVE-2019-6474: # - a broken packet can cause Kea to write invalid lease to disk # - when restarted, memfile backend gives up if there were more than 100 # errors while reading a lease file. misc.test_setup() srv_control.config_srv_subnet('10.0.0.0/8', '10.0.0.0-10.255.255.255') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') # we will send a lot of exactly the same packets, let's turn of printing them tmp = world.f_cfg.show_packets_from world.f_cfg.show_packets_from = "" world.scapy_verbose = 0 misc.test_procedure() # message that causes kea to write incorrect lease killer_message = "\x01\x00\x00\x02\x00\x2e\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x82\xdc\x4e\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\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\x63\x82\x53\x63\x35\x01\x03\x5c\xff\x02\xf9\x37\x04\x01\x1c\x03\x2b\x33\x04\x00\x00\x0e\x07\x50\x61\x64\x64\x69\x6e\x67\x00\x3d\x07\x01\x00\x00\x6c\x82\xdc\x4e\xff" # send it 101 times. This is an attempt to trigger the memfile lease parser to # bail out after 100 broken leases being read from a file. for _ in range(101): srv_msg.send_raw_message(raw_append=killer_message) # kea is actually responding but scapy is unable to detect it srv_msg.send_wait_for_message('MUST', None, expect_response=False) world.scapy_verbose = 99 world.f_cfg.show_packets_from = tmp # restart kea, before fix it wasn't starting srv_control.start_srv('DHCP', 'stopped') srv_control.start_srv('DHCP', 'started') # check if kea is still alive _get_offer()
def test_cve_2019_6472(): misc.test_setup() srv_control.config_srv_subnet('3000::/64', '3000::1-3000::ff') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() killer_message = "\x0d\x0f\xfc\x27\x00\x0d\x00\x00\x00\x00\x20\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\xe4\x00\x09\x00\xc9\x06\x0e\x14\x80\x00\x01\x00\x8f\x95\x00\x04\x02\x00\x00\x00\x03\x00\x0c\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xdc\xff\x00\x00\xff\x0c\x80\x00\xe1\xdc\xff\x00\x00\xff\x0c\x80\x00\x00\x00\x00\x19\x00\x0c\x27\x07\x0c\x00\xff\x8f\x95\x00\x00\x02\x00\x00\x00\x00\x00\x00\x20\x00\x07\xee\x14\xef\xfe\x0c\x00\x02\x00\x00\x00\x19\xe6\x0c\x27\xfe\x0c\x00\x14\x90\x95\x00\x04\x02\x00\x00\x00\x03\x00\x0c\x00\x00\x00\x1a\x00\xef\xfe\x0c\x00\x02\x00\x00\x00\x19\x00\x0c\x27\xc6\x0c\x00\xff\x8f\x95\x00\x04\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\xdd\xff\x00\x00\xfd\x0c\x00\x02\x00\x00\x00\x19\x00\x0c\x27\xfe\x0c\x00\xff\x6f\x95\x00\x00\x02\x00\x00\x00\x03\xff\x00\x40\x00\x10\xee\x14\xef\xfe\x0c\x00\x02\x00\x00\x00\x19\x00\x0c\x27\xfe\x0c\x00\x04\x02\x00\x00\x00\x03\x20\x12\x07\x00\x10\xee\x14\xff\x00" srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) _get_advertise()
def test_cve_2019_6473(): misc.test_setup() srv_control.config_srv_subnet('3000::/64', '3000::1-3000::ff') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() killer_message = "\x01\x2c\x06\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\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\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\xe7\x03\x00\x00\x00\x00\xde\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\x08\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\xff\xff\x00\x00\x00\x00\xe0\xff\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\xff\xff\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff\xee\x63\x82\x53\x63\x35\x01\x01\x3d\x07\x01\x00\x00\x00\x00\x00\x00\x19\x0c\x4e\x01\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\xff\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xff\xff\xff\x7f\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x04\x63\x82\x53\x63\x35\x01\x01\x3d\x07\x01\x00\x00\x00\x00\x00\x00\x19\x0c\x4e\x01\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\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\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x19\x0c\x4e\x01\x05\x3a\x04\xde\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x40\x00\x00\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x19\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\xff\xff\x05\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x00\x00\x00\x00\x00\x00\x0a\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe" srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) _get_advertise()
def test_cve_2019_wtf(): misc.test_setup() srv_control.config_srv_subnet('10.0.0.0/8', '10.0.0.0-10.255.255.255') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') killer_message = "\x01\x00\x00\x02\x00\x2e\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x82\xdc\x4e\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\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\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\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\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\x1d\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\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\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\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\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\x63\x82\x53\x63\x35\x01\x03\x5c\xff\x02\xf9\x37\x04\x01\x1c\x03\x2b\x33\x04\x00\x00\x0e\x07\x50\x61\x64\x64\x69\x6e\x67\x00\x3d\x07\x01\x00\x00\x6c\x82\xdc\x4e\xff" srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) # check if kea is still alive _get_offer()
def test_2019_6472_server_id(): misc.test_setup() srv_control.config_srv_subnet('3000::/64', '3000::1-3000::ff') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') for msg in ["SOLICIT", "REQUEST", "RENEW", "RELEASE", "REBIND"]: srv_msg.client_send_msg(msg) invalid_data = "\x00\x02\x01\x90\x00\x01\x00\x01\x24\xe9\x4e\x2a\x08\x00\x27\x4a\x04\x65" + 386 * "\x11" srv_msg.send_raw_message(raw_append=invalid_data) srv_msg.send_wait_for_message('MUST', None, expect_response=False) _get_advertise()
def test_2019_6473_fqdn_0_length(): misc.test_setup() srv_control.config_srv_subnet('3000::/64', '3000::1-3000::ff') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') for msg in ["REQUEST", "RENEW", "RELEASE"]: srv_msg.client_send_msg(msg) invalid_data = "\x00\x01\x00\x0a\x00\x03\x00\x01\xff\xff\xff\xff\xff\x01\x00\x03\x00\x28\x00\x00\x18\xd3\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x05\x00\x18\x20\x01\x0d\xb8\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x0b\xb8\x00\x00\x0f\xa0\x00\x02\x00\x0e\x00\x01\x00\x01\x24\xed\x1b\xb5\x08\x00\x27\x4a\x04\x65" invalid_data += "\x00\x27\x00\x00\x01" srv_msg.send_raw_message(raw_append=invalid_data) srv_msg.send_wait_for_message('MUST', None, expect_response=False) _get_advertise()
def test_cve_2019_6473(): misc.test_setup() srv_control.config_srv_subnet('192.168.50.0/24', '192.168.50.1-192.168.50.50') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() # message straight from fuzzer, kea has to drop it and survive killer_message = "\x01\x2c\x06\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\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\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\xe7\x03\x00\x00\x00\x00\xde\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\x08\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\xff\xff\x00\x00\x00\x00\xe0\xff\x00\x00\x00\x00\x00\x00\xde\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\xff\xff\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\xff\xee\x63\x82\x53\x63\x35\x01\x01\x3d\x07\x01\x00\x00\x00\x00\x00\x00\x19\x0c\x4e\x01\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\xff\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xff\xff\xff\x7f\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x04\x63\x82\x53\x63\x35\x01\x01\x3d\x07\x01\x00\x00\x00\x00\x00\x00\x19\x0c\x4e\x01\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\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\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x19\x0c\x4e\x01\x05\x3a\x04\xde\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x40\x00\x00\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x19\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\xff\xff\x05\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x00\x00\x00\x00\x00\x00\x0a\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\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\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xfe" srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) # check if kea is still alive _get_offer()
def test_2019_6472_subscriber_id(): misc.test_setup() srv_control.config_srv_subnet('3000::/64', '3000::1-3000::ff') srv_control.config_srv_id('LLT', '00:01:00:02:52:7b:a8:f0:08:00:27:58:f1:e8') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') for msg in ["REQUEST", "RENEW", "RELEASE"]: srv_msg.client_does_include('Client', 'client-id') # first let's add server id invalid_data = "\x00\x02\x00\x0e\x00\x01\x00\x02\x52\x7b\xa8\xf0\x08\x00\x27\x58\xf1\xe8" # and incorrect subscriber-id invalid_data += "\x00\x26\x01\x90\x00\x01\x00\x01\x24\xe9\x4e\x2a\x08\x00\x27\x4a\x04\x65" + 386 * "\x11" srv_msg.send_raw_message(msg_type=msg, raw_append=invalid_data) srv_msg.send_wait_for_message('MUST', "REPLY")
def test_2019_6473_fqdn(): misc.test_setup() srv_control.config_srv_subnet('3000::/64', '3000::1-3000::ff') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') for msg in ["REQUEST", "RENEW", "RELEASE"]: srv_msg.client_send_msg(msg) invalid_data = "\x00\x01\x00\x0a\x00\x03\x00\x01\xff\xff\xff\xff\xff\x01\x00\x03\x00\x28\x00\x00\x18\xd3\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x05\x00\x18\x20\x01\x0d\xb8\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x0b\xb8\x00\x00\x0f\xa0\x00\x02\x00\x0e\x00\x01\x00\x01\x24\xed\x1b\xb5\x08\x00\x27\x4a\x04\x65" invalid_data += "\x00\x27\x00\x64\x01\x04\x73\x74\x68\x36\x03\x73\x69\x78\x38\x6a\x61\x6b\x69\x73\x74\x6f\x74\x61\x6c\x6e\x69\x65\x64\x7a\x69\x77\x6e" invalid_data += "\x00" * 20 # put additional data in the middle of fqdn invalid_data += "\x79\x74\x65\x6b\x73\x74\x6b\x74\x6f\x72\x65\x67\x6f\x6a\x61\x73\x61\x6d\x6e\x69\x65\x6f\x67\x61\x72\x6e\x69\x61\x6d\x62\x6c\x61\x62\x6c\x61\x62\x6c\x61\x07\x65\x78\x61\x6d\x70\x6c\x65\x03\x63\x6f\x6d\x00" invalid_data += "\x00" srv_msg.send_raw_message(raw_append=invalid_data) misc.pass_criteria() srv_msg.send_wait_for_message('MUST', None, expect_response=False) _get_advertise()
def test_cve_2019_6473_hostname_length_0(): misc.test_setup() srv_control.config_srv_subnet('192.168.50.0/24', '192.168.50.1-192.168.50.50') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() # correct message killer_message = "\x01\x01\x06\x00\x00\x80\x64\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x27\x6d\xee\x67\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63\x35\x01\x01" # incorrect hostname extended with zeros, kea should drop and survive killer_message += "\x0c\x00\x00" killer_message += "\xff" # end option srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) _get_offer()
def test_cve_2019_6473_fqdn(): misc.test_setup() srv_control.config_srv_subnet('192.168.50.0/24', '192.168.50.1-192.168.50.50') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() # correct message killer_message = "\x01\x01\x06\x00\x00\x80\x64\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x27\x6d\xee\x67\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63\x35\x01\x01" # incorrect FQDN, kea should drop and survive killer_message += "\x0f\xff\xff\xff\x7f\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x04\x63\x82\x53\x63\x35\x01\x01\x3d\x07\x01\x00\x00\x00\x00\x00\x00\x19\x0c\x4e\x01\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\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\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x19\x0c\x4e\x01\x05\x3a\x04\xde\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x40\x00\x00\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x19\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\xff\xff\x05\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b" killer_message += "\xff" # end option srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) _get_offer()
def test_2019_6472_subscriber_id_relay(): # because of some reason scapy is crashing while parsing response, kea works correctly though. misc.test_setup() srv_control.config_srv_subnet('3000::/64', '3000::1-3000::ff') srv_control.config_srv_id('LLT', '00:01:00:02:52:7b:a8:f0:08:00:27:58:f1:e8') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') # correct relay-forward killer_message = "\x0c\x01\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x05\xfe\x80\x00\x00\x00\x00\x00\x00\x0a\x00\x27\xff\xfe\x6d\xee\x67\x00\x25\x00\x04\x00\x00\x02\x9a" # incorrect subscriber-id killer_message += "\x00\x26\x01\x90\x00\x01\x00\x01\x24\xe9\x4e\x2a\x08\x00\x27\x4a\x04\x65" + 386 * "\x11" # correct relayed message killer_message += "\x00\x12\x00\x03\x61\x62\x63\x00\x09\x00\x5a\x03\xea\x4b\x95\x00\x06\x00\x02\x00\x07\x00\x03\x00\x28\x00\x01\x2d\xca\x00\x00\x00\x64\x00\x00\x00\xc8\x00\x05\x00\x18\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x01\x90\x00\x00\x02\x58\x00\x02\x00\x0e\x00\x01\x00\x02\x52\x7b\xa8\xf0\x08\x00\x27\x58\xf1\xe8\x00\x01\x00\x0e\x00\x01\x00\x01\x52\x7b\xa8\xf0\xf6\xf5\xf4\xf3\xf2\x01" misc.pass_criteria() srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', 'RELAYREPLY')
def test_cve_2019_6473_hostname(): misc.test_setup() srv_control.config_srv_subnet('192.168.50.0/24', '192.168.50.1-192.168.50.50') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() # correct message killer_message = "\x01\x01\x06\x00\x00\x80\x64\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x27\x6d\xee\x67\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63\x35\x01\x01" # complete rubbish in hostname, should cause kea to drop message killer_message += "\x0c\xff\xff\xff\x7f\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x04\x63\x82\x53\x63\x35\x01\x01\x3d\x07\x01\x00\x00\x00\x00\x00\x00\x19\x0c\x4e\x01\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\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\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x19\x0c\x4e\x01\x05\x3a\x04\xde\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x40\x00\x00\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x19\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\xff\xff\x05\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b" killer_message += "\xff" # end option srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) # check if kea is still alive _get_offer()
def test_cve_2019_6472(): misc.test_setup() srv_control.config_srv_subnet('192.168.50.0/24', '192.168.50.1-192.168.50.50') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() # correct message killer_message = "\x01\x01\x06\x00\x00\x80\x64\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x27\x6d\xee\x67\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63\x35\x01\x01" # too long client-id, kea have to drop it and survive, exactly 255 killer_message += "\x3d\xfe\x00" + 253 * "\x12" killer_message += "\xff" srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) # let's check if it's still alive _get_offer()
def test_cve_2019_6473_hostname_over_255(): misc.test_setup() srv_control.config_srv_subnet('192.168.50.0/24', '192.168.50.1-192.168.50.50') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() # correct message killer_message = "\x01\x01\x06\x00\x00\x80\x64\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x27\x6d\xee\x67\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63\x35\x01\x01" # incorrect hostname extended with zeros, kea should drop and survive killer_message += "\x0c\xff\xff\xff\x7f\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x04\x63\x82\x53\x63\x35\x01\x01\x3d\x07\x01\x00\x00\x00\x00\x00\x00\x19\x0c\x4e\x01\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\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\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x19\x0c\x4e\x01\x05\x3a\x04\xde\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x40\x00\x00\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x19\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\xff\xff\x05\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b" killer_message += 50 * "\x00" # this is not gonna fly, in v4 you can't put too long option, max is 255 killer_message += "\xff" # end option srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) _get_offer()
def test_cve_2019_6473_fqdn_0_length(): misc.test_setup() srv_control.config_srv_subnet('192.168.50.0/24', '192.168.50.1-192.168.50.50') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() # correct message killer_message = "\x01\x01\x06\x00\x00\x80\x64\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x27\x6d\xee\x67\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63\x35\x01\x01" # hostname length 0, should be dropped killer_message += "\x0f\x00\x00" killer_message += "\xff" # end option srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) # check if kea is still alive _get_offer()
def test_cve_2019_6473_fqdn_too_long(): misc.test_setup() srv_control.config_srv_subnet('192.168.50.0/24', '192.168.50.1-192.168.50.50') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() # correct message killer_message = "\x01\x01\x06\x00\x00\x80\x64\x49\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x27\x6d\xee\x67\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\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\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\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\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63\x35\x01\x01" # incorrect FQDN extended with zeros at the end killer_message += "\x0f\xff\xff\xff\x7f\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x04\x63\x82\x53\x63\x35\x01\x01\x3d\x07\x01\x00\x00\x00\x00\x00\x00\x19\x0c\x4e\x01\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\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\x35\x01\x05\x3a\x04\x00\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x00\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x19\x0c\x4e\x01\x05\x3a\x04\xde\x00\x07\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\x3a\x07\x08\x3b\x04\x00\x00\x2e\x3b\x04\x00\x19\x2e\x56\x40\x00\x00\x00\x00\x00\x0a\x00\x12\x00\x00\x00\x00\x00\x19\x00\x0b\x82\x01\xfc\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x01\x05\xff\xff\x05\x00\x07\x08\x3b\x04\x00\x00\x2e\x3b" killer_message += 40 * "\x00" # in dhcp v4 option length max is 255, let's put 00 at the end killer_message += "\xff" # end srv_msg.send_raw_message(raw_append=killer_message) srv_msg.send_wait_for_message('MUST', None, expect_response=False) _get_offer()
def test_2019_6472_client_id(): misc.test_setup() srv_control.config_srv_subnet('3000::/64', '3000::1-3000::ff') srv_control.build_and_send_config_files() srv_control.start_srv('DHCP', 'started') misc.test_procedure() srv_msg.client_does_include('Client', 'IA-PD') srv_msg.client_does_include('Client', 'client-id') # let's get one exchange correct to save server-id correct_id = "\x00\x19\x00\x0c\x27\xfe\x0c\x00\xff\x6f\x95\x00\x00\x02\x00\x00" srv_msg.send_raw_message(msg_type='SOLICIT', raw_append=correct_id) misc.pass_criteria() srv_msg.send_wait_for_message('MUST', 'ADVERTISE') srv_msg.client_save_option('server-id') # All messages below are send with too long client-id, and should remain unanswered misc.test_procedure() srv_msg.client_does_include('Client', 'IA-PD') srv_msg.client_send_msg('SOLICIT') invalid_data = "\x00\x01\x01\x2C\x00\x04\x00\x01\x5d\x31\xce\x05\x08\x00\x27\x6d\xee\x67" + 800 * "\x12" srv_msg.send_raw_message(raw_append=invalid_data) srv_msg.client_does_include('RelayAgent', 'interface-id') srv_msg.create_relay_forward() srv_msg.send_wait_for_message('MUST', None, expect_response=False) misc.test_procedure() srv_msg.client_does_include('Client', 'IA-PD') srv_msg.client_add_saved_option('DONT ') invalid_data = "\x00\x01\x01\x2C\x00\x04\x00\x01\x5d\x31\xce\x05\x08\x00\x27\x6d\xee\x67" + 800 * "\x12" srv_msg.send_raw_message(msg_type='REQUEST', raw_append=invalid_data) misc.pass_criteria() srv_msg.send_wait_for_message('MUST', None, expect_response=False) misc.test_procedure() srv_msg.client_does_include('Client', 'IA-PD') srv_msg.client_add_saved_option('DONT ') srv_msg.client_send_msg('REQUEST') invalid_data = "\x00\x01\x01\x2C\x00\x04\x00\x01\x5d\x31\xce\x05\x08\x00\x27\x6d\xee\x67" + 800 * "\x12" srv_msg.send_raw_message(raw_append=invalid_data) misc.pass_criteria() srv_msg.client_does_include('RelayAgent', 'interface-id') srv_msg.create_relay_forward() srv_msg.send_wait_for_message('MUST', None, expect_response=False) misc.test_procedure() srv_msg.client_does_include('Client', 'IA-PD') invalid_data = "\x00\x01\x01\x2C\x00\x04\x00\x01\x5d\x31\xce\x05\x08\x00\x27\x6d\xee\x67" + 800 * "\x12" srv_msg.send_raw_message(msg_type='REBIND', raw_append=invalid_data) misc.pass_criteria() srv_msg.send_wait_for_message('MUST', None, expect_response=False) misc.test_procedure() srv_msg.client_does_include('Client', 'IA-PD') srv_msg.client_send_msg('REBIND') invalid_data = "\x00\x01\x01\x2C\x00\x04\x00\x01\x5d\x31\xce\x05\x08\x00\x27\x6d\xee\x67" + 800 * "\x12" srv_msg.send_raw_message(raw_append=invalid_data) misc.pass_criteria() srv_msg.client_does_include('RelayAgent', 'interface-id') srv_msg.create_relay_forward() srv_msg.send_wait_for_message('MUST', None, expect_response=False) misc.test_procedure() srv_msg.client_add_saved_option('DONT ') srv_msg.client_does_include('Client', 'IA-PD') invalid_data = "\x00\x01\x01\x2C\x00\x04\x00\x01\x5d\x31\xce\x05\x08\x00\x27\x6d\xee\x67" + 800 * "\x12" srv_msg.send_raw_message(msg_type='RENEW', raw_append=invalid_data) misc.pass_criteria() srv_msg.send_wait_for_message('MUST', None, expect_response=False) misc.test_procedure() srv_msg.client_add_saved_option('DONT ') srv_msg.client_does_include('Client', 'IA-PD') srv_msg.client_send_msg('RENEW') invalid_data = "\x00\x01\x01\x2C\x00\x04\x00\x01\x5d\x31\xce\x05\x08\x00\x27\x6d\xee\x67" + 800 * "\x12" srv_msg.send_raw_message(raw_append=invalid_data) misc.pass_criteria() srv_msg.client_does_include('RelayAgent', 'interface-id') srv_msg.create_relay_forward() srv_msg.send_wait_for_message('MUST', None, expect_response=False)