diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ef44eb9a3e..ddeafa5ca1 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -36,7 +36,7 @@ jobs:
strategy:
fail-fast: true
matrix:
- os: [ windows-latest, ubuntu-latest, macos-13 ]
+ os: [ windows-latest, ubuntu-latest, macos-15-intel ]
max-parallel: 1
steps:
- uses: actions/checkout@v4.1.6
diff --git a/src/main/java/org/owasp/webgoat/lessons/securepasswords/SecurePasswordsAssignment.java b/src/main/java/org/owasp/webgoat/lessons/securepasswords/SecurePasswordsAssignment.java
index c25f045c28..b402b6380d 100644
--- a/src/main/java/org/owasp/webgoat/lessons/securepasswords/SecurePasswordsAssignment.java
+++ b/src/main/java/org/owasp/webgoat/lessons/securepasswords/SecurePasswordsAssignment.java
@@ -59,6 +59,10 @@ public AttackResult completed(@RequestParam String password) {
+ calculateTime(
(long) strength.getCrackTimeSeconds().getOnlineNoThrottling10perSecond())
+ "");
+ output.append(
+ "Note: This estimate assumes brute-force attack and does not account for "
+ + "dictionary or rule-based attacks, which can significantly reduce real-world cracking time "
+ + "for common phrases.");
if (strength.getFeedback().getWarning().length() != 0)
output.append("Warning: " + strength.getFeedback().getWarning() + "");
// possible feedback: https://github.com/dropbox/zxcvbn/blob/master/src/feedback.coffee