Skip to content

Commit c1174f5

Browse files
committed
DTLS fix for decrypting using wrong record
1 parent bcb96b9 commit c1174f5

File tree

4 files changed

+22
-17
lines changed

4 files changed

+22
-17
lines changed

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/record/cipher/RecordAEADCipher.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ private byte[] decryptTLS12(DecryptionRequest decryptionRequest) throws CryptoEx
176176
byte[] nonce;
177177
byte[] data;
178178
if (cipherSuite.usesStrictExplicitIv()) {
179+
// TODO In the case of DTLS, we should get the sequence number from the record
179180
nonce = ArrayConverter.longToBytes(context.getReadSequenceNumber(), SEQUENCE_NUMBER_LENGTH);
180181
data = decryptionRequest.getCipherText();
181182
} else {

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/record/crypto/RecordDecryptor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,11 @@ public void decrypt(Record record) throws CryptoException {
6464
record.getComputations().setCipherKey(
6565
recordCipher.getKeySet().getReadKey(context.getChooser().getConnectionEndType()));
6666
}
67-
record.getComputations().setSequenceNumber(BigInteger.valueOf(context.getReadSequenceNumber()));
67+
if (context.getChooser().getSelectedProtocolVersion().isDTLS()) {
68+
record.getComputations().setSequenceNumber(record.getSequenceNumber().getValue());
69+
} else {
70+
record.getComputations().setSequenceNumber(BigInteger.valueOf(context.getReadSequenceNumber()));
71+
}
6872
byte[] encrypted = record.getProtocolMessageBytes().getValue();
6973
CipherSuite cipherSuite = context.getChooser().getSelectedCipherSuite();
7074
prepareNonMetaDataMaced(record, encrypted);

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/workflow/action/executor/ReceiveMessageHelper.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -227,17 +227,17 @@ private List<AbstractRecord> parseRecords(byte[] recordBytes, TlsContext context
227227
}
228228

229229
public MessageParsingResult parseMessages(RecordGroup recordGroup, TlsContext context) {
230-
230+
231231
// Due to TLS 1.3 Encrypted Type it might be necessary to look for
232232
// new groups here
233233
List<ProtocolMessage> messages = new LinkedList<>();
234234
List<DtlsHandshakeMessageFragment> messageFragments = new LinkedList<>();
235235
for (RecordGroup group : RecordGroup.generateRecordGroups(recordGroup.getRecords(), context)) {
236-
boolean parseAsUnknown = false;
237-
if ( context.getConfig().isDoNotParseInvalidMacOrPadMessages() ) {
238-
parseAsUnknown = group.isMacOrPadInvalid(context);
239-
}
240-
byte[] cleanProtocolMessageBytes = recordGroup.getCleanBytes();
236+
boolean parseAsUnknown = false;
237+
if (context.getConfig().isDoNotParseInvalidMacOrPadMessages()) {
238+
parseAsUnknown = group.isMacOrPadInvalid(context);
239+
}
240+
byte[] cleanProtocolMessageBytes = recordGroup.getCleanBytes();
241241

242242
if (context.getChooser().getSelectedProtocolVersion().isDTLS()) {
243243
// if the protocol is DTLS, parsing HANDSHAKE messages results
@@ -281,8 +281,8 @@ public MessageParsingResult parseMessages(RecordGroup recordGroup, TlsContext co
281281
}
282282

283283
private List<ProtocolMessage> handleCleanBytes(byte[] cleanProtocolMessageBytes,
284-
ProtocolMessageType typeFromRecord, TlsContext context,
285-
boolean onlyParse, boolean handleHandshakeAsDtlsFragments, boolean parseAsUnknown) {
284+
ProtocolMessageType typeFromRecord, TlsContext context, boolean onlyParse,
285+
boolean handleHandshakeAsDtlsFragments, boolean parseAsUnknown) {
286286
int dataPointer = 0;
287287
List<ProtocolMessage> receivedMessages = new LinkedList<>();
288288
if (parseAsUnknown) {

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/workflow/action/executor/RecordGroup.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,16 @@ public void adjustContext(TlsContext context) {
113113
record.adjustContext(context);
114114
}
115115
}
116-
116+
117117
public boolean isMacOrPadInvalid(TlsContext context) {
118-
for (AbstractRecord record : getRecords()) {
119-
if (record instanceof Record) {
120-
if (Boolean.FALSE.equals(((Record) record).getComputations().getMacValid())
121-
|| Boolean.FALSE.equals(((Record) record).getComputations().getPaddingValid()))
122-
return true;
123-
}
118+
for (AbstractRecord record : getRecords()) {
119+
if (record instanceof Record) {
120+
if (Boolean.FALSE.equals(((Record) record).getComputations().getMacValid())
121+
|| Boolean.FALSE.equals(((Record) record).getComputations().getPaddingValid()))
122+
return true;
123+
}
124124
}
125-
return false;
125+
return false;
126126
}
127127

128128
private boolean addRecord(AbstractRecord record) {

0 commit comments

Comments
 (0)