Network Firewall policies should have default stateless action set to drop or forward for fragmented packets
Fragmented packets are a classic attack vector. Attackers split malicious payloads across fragments to evade inspection engines that only examine complete packets. When the default stateless action is aws:pass, fragmented traffic bypasses all firewall rule evaluation entirely, creating a blind spot in your perimeter.
Setting the default to aws:drop blocks unrecognized fragmented traffic outright. Setting it to aws:forward_to_sfe sends fragments to the stateful engine for deep inspection and reassembly. Either option ensures fragments don't silently traverse the firewall uninspected.
Retrofit consideration
Changing the default from pass to drop may immediately block legitimate fragmented traffic such as large DNS responses or IPsec. Test in a non-production environment first.
Implementation
Choose the approach that matches how you manage Terraform.
Use the compliance.tf module to enforce this control by default. See get started with compliance.tf.
module "network_firewall" {
source = "pcidss.compliance.tf/terraform-aws-modules/network-firewall/aws//modules/policy"
version = ">=1.0.0"
name = "abc123-policy"
}
module "network_firewall" {
source = "nistcsf.compliance.tf/terraform-aws-modules/network-firewall/aws//modules/policy"
version = ">=1.0.0"
name = "abc123-policy"
}
module "network_firewall" {
source = "nistcsfv11.compliance.tf/terraform-aws-modules/network-firewall/aws//modules/policy"
version = ">=1.0.0"
name = "abc123-policy"
}
If you use terraform-aws-modules/network-firewall/aws//modules/policy, set the right module inputs for this control. You can later migrate to the compliance.tf module with minimal changes because it is compatible by design.
module "network_firewall" {
source = "terraform-aws-modules/network-firewall/aws//modules/policy"
version = ">=1.0.0"
name = "abc123-policy"
}
Use AWS provider resources directly. See docs for the resources involved: aws_networkfirewall_firewall_policy.
resource "aws_networkfirewall_firewall_policy" "this" {
firewall_policy {
stateless_default_actions = ["aws:drop"]
stateless_fragment_default_actions = ["aws:drop"]
}
name = "pofix-abc123"
}
What this control checks
The aws_networkfirewall_firewall_policy resource defines behavior in a firewall_policy block. stateless_fragment_default_actions controls how the firewall handles fragments that don't match any stateless rule. Setting it to ["aws:drop"] or ["aws:forward_to_sfe"] passes the control. ["aws:pass"] fails it, since fragments traverse the firewall without inspection. Note that stateless_default_actions (full packets) is evaluated by a separate control and doesn't affect this check.
Common pitfalls
Confusing full packet and fragment default actions
The
aws_networkfirewall_firewall_policyresource has two separate arguments:stateless_default_actions(full packets) andstateless_fragment_default_actions(fragments). Setting only the full-packet action toaws:dropdoes not satisfy this control. You must explicitly setstateless_fragment_default_actions.Breaking MTU-sensitive workloads
Switching from
aws:passtoaws:dropcan silently break protocols and applications that produce fragmented traffic, such as certain VPN tunnels or large UDP payloads. If you need inspection without outright blocking, useaws:forward_to_sfeto let the stateful engine reassemble and evaluate fragments.Custom action names added alongside the default
stateless_fragment_default_actionsaccepts a list. You can include a custom action name (for CloudWatch metrics publishing) alongsideaws:droporaws:forward_to_sfe. Includingaws:passanywhere in that list will cause the control to fail.
Audit evidence
Config rule NETWORK_FIREWALL_POLICY_DEFAULT_ACTION_FRAGMENT_PACKETS evaluation results showing all Network Firewall policies COMPLIANT. Supplement with console screenshots of each policy's stateless default actions section confirming "Drop" or "Forward to stateful rule groups" for fragmented packets. CloudTrail UpdateFirewallPolicy and CreateFirewallPolicy events cover the change history, confirming no policy was set or changed to aws:pass for fragment handling.
Framework-specific interpretation
PCI DSS v4.0: Requirement 1 expects firewall policies to deny all traffic not explicitly permitted. Default-pass for fragmented packets violates that principle directly and opens a path for attackers to bypass the network segmentation protecting cardholder data.
NIST Cybersecurity Framework v2.0: PR.IR and the broader Protect function both call for controlling traffic at network boundaries. Dropping or forwarding fragments for stateful inspection is exactly the kind of filtering these sub-categories expect, specifically preventing unauthorized data flows through uninspected channels.
Tool mappings
Use these identifiers to cross-reference this control across tools, reports, and evidence.
Compliance.tf Control:
networkfirewall_firewall_policy_default_stateless_action_check_fragmented_packetsAWS Config Managed Rule:
NETFW_POLICY_DEFAULT_ACTION_FRAGMENT_PACKETSPowerpipe Control:
aws_compliance.control.networkfirewall_firewall_policy_default_stateless_action_check_fragmented_packetsProwler Check:
networkfirewall_policy_default_action_fragmented_packetsAWS Security Hub Control:
NetworkFirewall.5
Last reviewed: 2026-03-09