ELB use weak ciphers
ID |
aws_elb_weak_ciphers |
Severity |
high |
Remediation Complexity |
trivial |
Remediation Risk |
medium |
Remediation Effort |
low |
Vendor |
AWS |
Resource |
Encryption |
Tags |
ASVS50:v11.3.1, ASVS50:v14.2.2, reachable |
Description
The listener terminates TLS with a security policy that still accepts an obsolete protocol version, and therefore the weak cipher suites that come with it — CBC-mode suites and RSA key transport, which the TLS 1.2 policies dropped. That leaves the connection between the client and the load balancer open to downgrade and padding-oracle attacks.
A listener names a policy, not a suite list: AWS owns the suites, and the policy name is what states the lowest protocol version the listener will negotiate. ELBSecurityPolicy-2015-05 and the other policies that predate the versioned naming accept TLS 1.0.
To fix it, configure listeners.SslPolicy with a policy whose name states TLS 1.2 or later, such as ELBSecurityPolicy-TLS-1-2-2017-01 or ELBSecurityPolicy-TLS13-1-2-2021-06.
A policy name that AWS does not publish is reported too, with its own explanation: nothing maintains it, so neither the protocol floor nor the cipher suites the listener accepts can be verified. That finding carries no crypto asset link, because attributing a protocol version to an unknown policy would be a guess.
Learn more about this topic at AWS ELB SSL Policy.
Examples
---
- name: Example playbook
hosts: localhost
tasks:
- amazon.aws.elb_application_lb:
access_logs_enabled: true
access_logs_s3_bucket: mybucket
access_logs_s3_prefix: "logs"
name: myalb
security_groups:
- sg-12345678
- my-sec-group
subnets:
- subnet-012345678
- subnet-abcdef000
listeners:
- Protocol: HTTPS # Required. The protocol for connections from clients to the load balancer (HTTP or HTTPS) (case-sensitive).
Port: 443 # Required. The port on which the load balancer is listening.
# The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy.
SslPolicy: ELBSecurityPolicy-2015-05
Certificates: # The ARN of the certificate (only one certficate ARN should be provided)
- CertificateArn: arn:aws:iam::123456789012:server-certificate/test.domain.com
DefaultActions:
- Type: forward # Required.
TargetGroupName: # Required. The name of the target group
state: present
Mitigation / Fix
---
- name: Example playbook
hosts: localhost
tasks:
- amazon.aws.elb_application_lb:
access_logs_enabled: true
access_logs_s3_bucket: mybucket
access_logs_s3_prefix: "logs"
name: myalb
security_groups:
- sg-12345678
- my-sec-group
subnets:
- subnet-012345678
- subnet-abcdef000
listeners:
- Protocol: HTTPS # Required. The protocol for connections from clients to the load balancer (HTTP or HTTPS) (case-sensitive).
Port: 443 # Required. The port on which the load balancer is listening.
# The security policy that defines which ciphers and protocols are supported. The default is the current predefined security policy.
SslPolicy: ELBSecurityPolicy-TLS-1-2-2017-01
Certificates: # The ARN of the certificate (only one certficate ARN should be provided)
- CertificateArn: arn:aws:iam::123456789012:server-certificate/test.domain.com
DefaultActions:
- Type: forward # Required.
TargetGroupName: # Required. The name of the target group
state: present