8000 WireParseException is thrown on short UDP SOA Query messages after upgrade to v3.4.2 · Issue #224 · dnsjava/dnsjava · GitHub
[go: up one dir, main page]

Skip to content
WireParseException is thrown on short UDP SOA Query messages after upgrade to v3.4.2 #224
Closed
@SoylentBob

Description

@SoylentBob

After we performed the upgrade from version 3.4.1 to 3.4.2 we noticed that parsing short SOA queries received via UDP started failing on our nameservers.

Consider the following messages:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12869
;; flags: rd ad ; qd: 1 an: 0 au: 0 ad: 1 
;; QUESTIONS:
;;	abcdef.com., type = SOA, class = IN

;; ANSWERS:

;; AUTHORITY RECORDS:

;; ADDITIONAL RECORDS:
.			0	CLASS4096	OPT	[{COOKIE: 4531D089BA80C6EB}]  ; payload 4096, xrcode 0, version 0, flags 0

;; Message size: 51 bytes
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35933
;; flags: rd ad ; qd: 1 an: 0 au: 0 ad: 1 
;; QUESTIONS:
;;	abcdefg.com., type = SOA, class = IN

;; ANSWERS:

;; AUTHORITY RECORDS:

;; ADDITIONAL RECORDS:
.			0	CLASS4096	OPT	[{COOKIE: 00FAA57F21B5AB0E}]  ; payload 4096, xrcode 0, version 0, flags 0

;; Message size: 52 bytes

Using the following code to parse the captured queries works on v3.4.1 on both messages, but fails on the short message on v3.4.2:

  @Test
  public void messageBug() throws Throwable {
    final String shortPacket = "MkUBIAABAAAAAAABBmFiY2RlZgNjb20AAAYAAQAAKRAAAAAAAAAMAAoACEUx0Im6gMbrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
    final String longPacket = "jF0BIAABAAAAAAABB2FiY2RlZmcDY29tAAAGAAEAACkQAAAAAAAADAAKAAgA+qV/IbWrDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";

    final Message longMessage = new Message(Base64.getDecoder().decode(longPacket));

    System.out.println(longMessage);

    final Message shortMessage = new Message(Base64.getDecoder().decode(shortPacket));

    System.out.println(shortMessage);
  }

The cause seems to be a WireParseException:

end of input
org.xbill.DNS.WireParseException: end of input
	at org.xbill.DNS.DNSInput.require(DNSInput.java:54)
	at org.xbill.DNS.DNSInput.readU16(DNSInput.java:154)
	at org.xbill.DNS.EDNSOption.fromWire(EDNSOption.java:164)
	at org.xbill.DNS.OPTRecord.rrFromWire(OPTRecord.java:84)
	at org.xbill.DNS.Record.newRecord(Record.java:82)
	at org.xbill.DNS.Record.fromWire(Record.java:191)
	at org.xbill.DNS.Message.<init>(Message.java:111)
	at org.xbill.DNS.Message.<init>(Message.java:143)
	at MessageTest.messageBug(MessageTest.java:20)

The queries have been sent via dig (e.g. dig soa abcdef.com @127.0.0.1 -p 8853) and captured like this:

final DatagramSocket socket = ...;
final byte[] data = new byte[512];
final DatagramPacket inputPacket = new DatagramPacket(data, data.length);
socket.receive(inputPacket);
System.out.println(Base64.getEncoder().encodeToString(data));
final Message query = new Message(data);

I'm not entirely sure whether this is a bug in the library or on our end. We adapted the code to receive UDP packets from the jnamed implementation in this project.

For the meantime we rolled back to the previous version, to get rid of the problem in our system.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0