Skip to content

Commit 766b826

Browse files
authored
Merge pull request #608 from RUB-NDS/isRequiredFix
Optional messages fix
2 parents ef0eae0 + d65c569 commit 766b826

File tree

21 files changed

+213
-271
lines changed

21 files changed

+213
-271
lines changed

Attacks/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>de.rub.nds.tlsattacker</groupId>
66
<artifactId>TLS-Attacker</artifactId>
7-
<version>3.3.1</version>
7+
<version>3.4.0</version>
88
</parent>
99
<artifactId>Attacks</artifactId>
1010
<packaging>jar</packaging>

Attacks/src/main/java/de/rub/nds/tlsattacker/attacks/config/InvalidCurveAttackConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,7 @@ public Config createConfig() {
345345
config.setStopActionsAfterFatal(true);
346346
config.setStopReceivingAfterFatal(true);
347347
config.setEarlyStop(true);
348+
config.setStopActionsAfterIOException(true);
348349
config.setAddECPointFormatExtension(true);
349350
config.setAddEllipticCurveExtension(true);
350351
config.setAddServerNameIndicationExtension(true);

Attacks/src/main/java/de/rub/nds/tlsattacker/attacks/ec/TwistedCurvePoint.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,13 @@ public enum TwistedCurvePoint {
106106
16)),
107107
// X-Curves use point of order 4 for evaluation of server behavior
108108
X25519Twist(
109-
new BigInteger("2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2450", 16),
109+
new BigInteger("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec", 16),
110110
new BigInteger("5B8545C0F22DFADE38855A5CD1228352F134A9E655D637C03704BDE426506941", 16),
111111
new BigInteger("4"),
112112
NamedGroup.ECDH_X25519,
113113
new BigInteger("CA6648A697DC4F37B1BB5C5809E9F265332D9C6138371C0809B54D69C303AC7", 16)),
114114
X448Twist(
115-
new BigInteger(
116-
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0000000000000000000000000000000000000000000000000000CB8D",
117-
16),
115+
new BigInteger("1", 16),
118116
new BigInteger(
119117
"9A6A7C05A0FA5E28F5804F2A40D7E9D4411FAA289AD9C54ACEFA9D5EAD8C5E1A0041CFBCA155921E66D4BDEC85414FFE42C18EFFEF918CB5",
120118
16),

Attacks/src/main/java/de/rub/nds/tlsattacker/attacks/impl/InvalidCurveAttacker.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,6 @@ public Boolean isVulnerable() {
162162
for (int i = 1; i <= protocolFlows; i++) {
163163
setPremasterSecret(curve, i, point);
164164
InvalidCurveTask taskToAdd = new InvalidCurveTask(buildState(), executor.getReexecutions(), i);
165-
if (config.isAttackInRenegotiation() && getTlsConfig().getHighestProtocolVersion() == ProtocolVersion.TLS13) {
166-
taskToAdd.setResolveTls13CCSdiscrepancy(true);
167-
}
168165
taskList.add(taskToAdd);
169166
}
170167
executor.bulkExecuteTasks(taskList);
@@ -175,9 +172,12 @@ private void setPremasterSecret(EllipticCurve curve, int i, Point point) {
175172
if (config.getPremasterSecret() != null) {
176173
premasterSecret = config.getPremasterSecret();
177174
} else {
178-
// note that we're testing the congruences of the DECODED scalar
179-
// for RFC7748 curves
180-
Point sharedPoint = curve.mult(new BigInteger("" + i), point);
175+
BigInteger secret = new BigInteger("" + i);
176+
if (config.getNamedGroup() == NamedGroup.ECDH_X25519 || config.getNamedGroup() == NamedGroup.ECDH_X448) {
177+
RFC7748Curve rfcCurve = (RFC7748Curve) CurveFactory.getCurve(config.getNamedGroup());
178+
secret = rfcCurve.decodeScalar(secret);
179+
}
180+
Point sharedPoint = curve.mult(secret, point);
181181
if (sharedPoint.getX() == null) {
182182
premasterSecret = BigInteger.ZERO;
183183
} else {

Attacks/src/main/java/de/rub/nds/tlsattacker/attacks/task/InvalidCurveTask.java

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ public class InvalidCurveTask extends TlsTask {
4141

4242
private Point receivedEcKey;
4343

44-
private boolean resolveTls13CCSdiscrepancy;
45-
4644
public InvalidCurveTask(State state, int reexecutions, int appliedSecret) {
4745
super(reexecutions);
4846
this.appliedSecret = appliedSecret;
@@ -60,10 +58,6 @@ public void execute() {
6058
WorkflowExecutor executor = new DefaultWorkflowExecutor(getState());
6159
executor.executeWorkflow();
6260

63-
if (resolveTls13CCSdiscrepancy) {
64-
allowTls13CCS(getState());
65-
}
66-
6761
if (getState().getTlsContext().getServerEcPublicKey() != null) {
6862
receivedEcKey = getState().getTlsContext().getServerEcPublicKey();
6963
}
@@ -93,41 +87,6 @@ public Point getReceivedEcKey() {
9387
return receivedEcKey;
9488
}
9589

96-
/**
97-
* @return the resolveTls13CCSdiscrepancy
98-
*/
99-
public boolean isResolveTls13CCSdiscrepancy() {
100-
return resolveTls13CCSdiscrepancy;
101-
}
102-
103-
/**
104-
* @param resolveTls13CCSdiscrepancy
105-
* the resolveTls13CCSdiscrepancy to set
106-
*/
107-
public void setResolveTls13CCSdiscrepancy(boolean resolveTls13CCSdiscrepancy) {
108-
this.resolveTls13CCSdiscrepancy = resolveTls13CCSdiscrepancy;
109-
}
110-
111-
/**
112-
* Tries to resolve a Workflow Trace conflict when a server sent a CCS
113-
* message to maintain backward compatibility in a TLS 1.3 handshake
114-
*/
115-
private void allowTls13CCS(State state) {
116-
ReceiveAction firstServerMessages = null;
117-
WorkflowTrace trace = state.getWorkflowTrace();
118-
for (TlsAction action : trace.getTlsActions()) {
119-
if (action instanceof ReceiveAction) {
120-
firstServerMessages = (ReceiveAction) action;
121-
break;
122-
}
123-
}
124-
if (firstServerMessages != null && !firstServerMessages.executedAsPlanned()
125-
&& firstServerMessages.getReceivedMessages().get(1) instanceof ChangeCipherSpecMessage) {
126-
firstServerMessages.getExpectedMessages().add(1, new ChangeCipherSpecMessage());
127-
LOGGER.debug("Tried to resolve workflow trace discrepancy for unexpected CCS in TLS 1.3 handshake");
128-
}
129-
}
130-
13190
/**
13291
* @return the state
13392
*/

TLS-Client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>de.rub.nds.tlsattacker</groupId>
66
<artifactId>TLS-Attacker</artifactId>
7-
<version>3.3.1</version>
7+
<version>3.4.0</version>
88
</parent>
99
<name>TLS-Client</name>
1010
<artifactId>TLS-Client</artifactId>

TLS-Core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>de.rub.nds.tlsattacker</groupId>
66
<artifactId>TLS-Attacker</artifactId>
7-
<version>3.3.1</version>
7+
<version>3.4.0</version>
88
</parent>
99
<artifactId>TLS-Core</artifactId>
1010
<packaging>jar</packaging>

TLS-Core/src/main/java/de/rub/nds/tlsattacker/core/config/Config.java

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import de.rub.nds.modifiablevariable.util.ArrayConverter;
1212
import de.rub.nds.modifiablevariable.util.ByteArrayAdapter;
13+
import de.rub.nds.modifiablevariable.util.UnformattedByteArrayAdapter;
1314
import de.rub.nds.tlsattacker.core.certificate.CertificateKeyPair;
1415
import de.rub.nds.tlsattacker.core.connection.InboundConnection;
1516
import de.rub.nds.tlsattacker.core.connection.OutboundConnection;
@@ -134,7 +135,7 @@ public static Config createEmptyConfig() {
134135
return c;
135136
}
136137

137-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
138+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
138139
private byte[] defaultHandshakeSecret = new byte[32];
139140

140141
private CertificateKeyType preferedCertificateSignatureType = CertificateKeyType.RSA;
@@ -260,28 +261,28 @@ public static Config createEmptyConfig() {
260261
* SessionTLSTicket for the SessionTLSTicketExtension. It's an empty session
261262
* ticket since we initiate a new connection.
262263
*/
263-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
264+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
264265
private byte[] tlsSessionTicket = new byte[0];
265266

266267
/**
267268
* Renegotiation info for the RenegotiationInfo extension for the Client.
268269
* It's an empty info since we initiate a new connection.
269270
*/
270-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
271+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
271272
private byte[] defaultClientRenegotiationInfo = new byte[0];
272273

273274
/**
274275
* Renegotiation info for the RenegotiationInfo extension for the Client.
275276
* It's an empty info since we initiate a new connection.
276277
*/
277-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
278+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
278279
private byte[] defaultServerRenegotiationInfo = new byte[0];
279280

280281
/**
281282
* SignedCertificateTimestamp for the SignedCertificateTimestampExtension.
282283
* It's an emty timestamp, since the server sends it.
283284
*/
284-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
285+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
285286
private byte[] defaultSignedCertificateTimestamp = new byte[0];
286287

287288
/**
@@ -302,24 +303,24 @@ public static Config createEmptyConfig() {
302303
/**
303304
* This is the responder ID list of the CertificateStatusRequest extension
304305
*/
305-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
306+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
306307
private byte[] certificateStatusRequestExtensionResponderIDList = new byte[0];
307308

308309
/**
309310
* This is the request extension of the CertificateStatusRequest extension
310311
*/
311-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
312+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
312313
private byte[] certificateStatusRequestExtensionRequestExtension = new byte[0];
313314

314315
/**
315316
* Default ALPN announced protocols
316317
*/
317-
private String[] alpnAnnouncedProtocols = new String[]{"h2"};
318+
private String[] alpnAnnouncedProtocols = new String[] { "h2" };
318319

319320
/**
320321
* Default SRP Identifier
321322
*/
322-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
323+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
323324
private byte[] secureRemotePasswordExtensionIdentifier = "UserName".getBytes(Charset.forName("UTF-8"));
324325

325326
/**
@@ -331,7 +332,7 @@ public static Config createEmptyConfig() {
331332
/**
332333
* Default SRTP extension master key identifier
333334
*/
334-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
335+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
335336
private byte[] secureRealTimeTransportProtocolMasterKeyIdentifier = new byte[0];
336337

337338
/**
@@ -623,19 +624,19 @@ public static Config createEmptyConfig() {
623624
/**
624625
* The PSK to use.
625626
*/
626-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
627+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
627628
private byte[] psk = new byte[0];
628629

629630
/**
630631
* The client's early traffic secret.
631632
*/
632-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
633+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
633634
private byte[] clientEarlyTrafficSecret = new byte[128];
634635

635636
/**
636637
* The early secret of the session.
637638
*/
638-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
639+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
639640
private byte[] earlySecret = new byte[256];
640641

641642
/**
@@ -646,7 +647,7 @@ public static Config createEmptyConfig() {
646647
/**
647648
* The psk used for early data (!= earlySecret or earlyTrafficSecret).
648649
*/
649-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
650+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
650651
private byte[] earlyDataPsk = new byte[256];
651652

652653
/**
@@ -662,10 +663,10 @@ public static Config createEmptyConfig() {
662663
/**
663664
* Early data to be sent.
664665
*/
665-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
666+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
666667
private byte[] earlyData = ArrayConverter.hexStringToByteArray("544c532d41747461636b65720a");
667668

668-
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
669+
@XmlJavaTypeAdapter(UnformattedByteArrayAdapter.class)
669670
private byte[] distinguishedNames = new byte[0];
670671

671672
private Boolean enforceSettings = false;
@@ -763,7 +764,7 @@ public static Config createEmptyConfig() {
763764
* How much padding bytes should be send by default
764765
*/
765766
@XmlJavaTypeAdapter(ByteArrayAdapter.class)
766-
private byte[] defaultPaddingExtensionBytes = new byte[]{0, 0, 0, 0, 0, 0};
767+
private byte[] defaultPaddingExtensionBytes = new byte[] { 0, 0, 0, 0, 0, 0 };
767768

768769
/**
769770
* How long should our DTLSCookies be by default
@@ -2886,7 +2887,8 @@ public byte[] getEarlyData() {
28862887
}
28872888

28882889
/**
2889-
* @param earlyData the earlyData to set
2890+
* @param earlyData
2891+
* the earlyData to set
28902892
*/
28912893
public void setEarlyData(byte[] earlyData) {
28922894
this.earlyData = earlyData;
@@ -2900,7 +2902,8 @@ public List<PskSet> getDefaultPskSets() {
29002902
}
29012903

29022904
/**
2903-
* @param defaultPskSets the defaultPskSets to set
2905+
* @param defaultPskSets
2906+
* the defaultPskSets to set
29042907
*/
29052908
public void setDefaultPskSets(List<PskSet> defaultPskSets) {
29062909
this.defaultPskSets = defaultPskSets;
@@ -2914,7 +2917,8 @@ public byte[] getPsk() {
29142917
}
29152918

29162919
/**
2917-
* @param psk the psk to set
2920+
* @param psk
2921+
* the psk to set
29182922
*/
29192923
public void setPsk(byte[] psk) {
29202924
this.psk = psk;
@@ -2928,7 +2932,8 @@ public byte[] getDefaultSessionTicketAgeAdd() {
29282932
}
29292933

29302934
/**
2931-
* @param defaultSessionTicketAgeAdd the defaultSessionTicketAgeAdd to set
2935+
* @param defaultSessionTicketAgeAdd
2936+
* the defaultSessionTicketAgeAdd to set
29322937
*/
29332938
public void setDefaultSessionTicketAgeAdd(byte[] defaultSessionTicketAgeAdd) {
29342939
this.defaultSessionTicketAgeAdd = defaultSessionTicketAgeAdd;
@@ -2942,7 +2947,8 @@ public byte[] getDefaultSessionTicketNonce() {
29422947
}
29432948

29442949
/**
2945-
* @param defaultSessionTicketNonce the defaultSessionTicketNonce to set
2950+
* @param defaultSessionTicketNonce
2951+
* the defaultSessionTicketNonce to set
29462952
*/
29472953
public void setDefaultSessionTicketNonce(byte[] defaultSessionTicketNonce) {
29482954
this.defaultSessionTicketNonce = defaultSessionTicketNonce;
@@ -2956,8 +2962,8 @@ public byte[] getDefaultSessionTicketIdentity() {
29562962
}
29572963

29582964
/**
2959-
* @param defaultSessionTicketIdentity the defaultSessionTicketIdentity to
2960-
* set
2965+
* @param defaultSessionTicketIdentity
2966+
* the defaultSessionTicketIdentity to set
29612967
*/
29622968
public void setDefaultSessionTicketIdentity(byte[] defaultSessionTicketIdentity) {
29632969
this.defaultSessionTicketIdentity = defaultSessionTicketIdentity;
@@ -2971,7 +2977,8 @@ public byte[] getClientEarlyTrafficSecret() {
29712977
}
29722978

29732979
/**
2974-
* @param clientEarlyTrafficSecret the clientEarlyTrafficSecret to set
2980+
* @param clientEarlyTrafficSecret
2981+
* the clientEarlyTrafficSecret to set
29752982
*/
29762983
public void setClientEarlyTrafficSecret(byte[] clientEarlyTrafficSecret) {
29772984
this.clientEarlyTrafficSecret = clientEarlyTrafficSecret;
@@ -2985,7 +2992,8 @@ public byte[] getEarlySecret() {
29852992
}
29862993

29872994
/**
2988-
* @param earlySecret the earlySecret to set
2995+
* @param earlySecret
2996+
* the earlySecret to set
29892997
*/
29902998
public void setEarlySecret(byte[] earlySecret) {
29912999
this.earlySecret = earlySecret;
@@ -2999,7 +3007,8 @@ public CipherSuite getEarlyDataCipherSuite() {
29993007
}
30003008

30013009
/**
3002-
* @param earlyDataCipherSuite the earlyDataCipherSuite to set
3010+
* @param earlyDataCipherSuite
3011+
* the earlyDataCipherSuite to set
30033012
*/
30043013
public void setEarlyDataCipherSuite(CipherSuite earlyDataCipherSuite) {
30053014
this.earlyDataCipherSuite = earlyDataCipherSuite;
@@ -3013,7 +3022,8 @@ public byte[] getEarlyDataPsk() {
30133022
}
30143023

30153024
/**
3016-
* @param earlyDataPsk the earlyDataPsk to set
3025+
* @param earlyDataPsk
3026+
* the earlyDataPsk to set
30173027
*/
30183028
public void setEarlyDataPsk(byte[] earlyDataPsk) {
30193029
this.earlyDataPsk = earlyDataPsk;
@@ -3027,7 +3037,8 @@ public Boolean isUsePsk() {
30273037
}
30283038

30293039
/**
3030-
* @param usePsk the usePsk to set
3040+
* @param usePsk
3041+
* the usePsk to set
30313042
*/
30323043
public void setUsePsk(Boolean usePsk) {
30333044
this.usePsk = usePsk;

0 commit comments

Comments
 (0)