ATS Exception No Forward Secrecy

ID

swift.ats_exception_no_forward_secrecy

Severity

low

Remediation Complexity

trivial

Remediation Risk

medium

Remediation Effort

medium

Resource

Information Leak

Language

Swift

Tags

ASVS50:v12.2.1, ASVS50:v12.3.1, ASVS50:v12.3.3, ASVS50:v4.4.1, ASVS50:v4.4.4, CWE:319, MASVS:MSTG-NETWORK-2

Description

Setting NSExceptionRequiresForwardSecrecy to false in a NSAppTransportSecurity.NSExceptionDomains entry allows the named host to negotiate cipher suites that do not provide forward secrecy (typically RSA key-exchange suites).

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>legacy.example.com</key>  <!-- FLAW -->
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

Rationale

Without forward secrecy, an attacker who later compromises the server’s private key (e.g. via subpoena, breach, or hardware seizure) can decrypt every TLS session ever recorded on the wire. Modern ATS requires forward secrecy by default; opting out should be reserved for hosts that genuinely cannot be upgraded.

Remediation

Remove the NSExceptionRequiresForwardSecrecy entry to restore the default (true). Upgrade the upstream server to support ECDHE / DHE key-exchange cipher suites.

References