You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
updateNetworkACLItem with partialupgrade=false leaves a rule broken when cidrlist or traffictype is left out, and drops an ICMP type given with tcp #14642
updateNetworkACLItem with partialupgrade=false replaces every field of the rule with what the call passes. Two cases go wrong.
1. A field left out is written as null, and the rule is left broken.
When cidrlist or traffictype is left out, transferDataToNetworkAclRulePojo() sets them to null. NetworkACLItemDaoImpl.update() then writes the rule row and only afterwards updates the CIDRs, outside a transaction:
with cidrlist left out, NetworkACLItemCidrsDaoImpl.updateCidrs() fails with Cannot invoke "java.util.List.size()" because "cidrs" is null. The call fails, but the row has already been committed with the null traffic type.
from then on listNetworkACLs for that list fails with Cannot invoke "...TrafficType.toString()" because ... getTrafficType() is null, and applying the list fails the same way in SetNetworkACLCommand, until the rule is updated again with every field.
When protocol is left out, the call fails earlier with a NullPointerException in updateIcmpCodeAndTypeFullUpgrade(). Nothing is written in that case, but the error is an NPE rather than a message. (#14046 removes that NPE; the rule would then be saved without a protocol, which createNetworkACL never allows.)
action left out is already handled: it becomes Allow, as on create.
2. An ICMP type or code given with another protocol is silently dropped.
partialupgrade=false protocol=tcp icmptype=8 is accepted, and the rule is saved as tcp without the ICMP type. createNetworkACL with the same parameters, and the same update with the default partialupgrade=true, both refuse it with "Can specify icmpCode and icmpType for ICMP protocol only".
versions
4.20 and later for the dropped ICMP type; the null fields since partialupgrade was added in 4.12. Seen on 4.22 and main.
The steps to reproduce the bug
In a VPC, create an ACL list and a rule on it: createNetworkACL aclid=<list> protocol=tcp startport=80 endport=80 cidrlist=10.1.2.0/24 action=allow traffictype=ingress.
updateNetworkACLItem id=<rule> partialupgrade=false protocol=udp startport=53 endport=53. It fails with the cidrs is null NPE.
listNetworkACLs aclid=<list> now fails with the getTrafficType() is null NPE.
updateNetworkACLItem id=<rule> partialupgrade=false protocol=tcp cidrlist=10.1.2.0/24 action=allow traffictype=ingress repairs it.
On an ICMP rule, updateNetworkACLItem id=<rule> partialupgrade=false protocol=tcp icmptype=8 cidrlist=10.1.2.0/24 action=allow traffictype=ingress is accepted, and the rule is tcp with no ICMP type.
What to do about it?
With partialupgrade=false, refuse the call when protocol, cidrlist or traffictype is missing, before anything is written. Defaulting them as create does would silently widen a rule to every address, or turn an egress rule into an ingress rule.
Refuse an invalid traffictype on update, as create does, instead of ignoring it.
Keep an ICMP type or code given with another protocol, so that the existing validation refuses it.
Write the rule row and its CIDRs in one transaction, so that a failure on the CIDRs can't leave the rule half updated.
threat detection engine error
The threat detection engine encountered an error and could not complete analysis. This is a tooling failure, not a security finding.
What happened
The threat detection engine failed to produce results.
updateNetworkACLItem with partialupgrade=false writes missing fields as null. With cidrlist or traffictype omitted, the rule row is saved before the CIDR update fails. That leaves listNetworkACLs failing for the whole list until the rule is fixed. A missing protocol gives an NPE. An ICMP type given with protocol=tcp is silently dropped, while createNetworkACL refuses it.
📊 Assessment
Dimension
Value
Reasoning
Type
type:bug
Partial update corrupts rule data
Component
component:api, component:vpc
updateNetworkACLItem and VPC ACL storage
Severity
Severity:Major
One update can break listNetworkACLs for the whole list
Activity
github-actions commentedon Nov 10, 2026
Warning
threat detection engine error
The threat detection engine encountered an error and could not complete analysis. This is a tooling failure, not a security finding.
What happened
The threat detection engine failed to produce results.
Review the workflow run logs for details.
🎯 Triage report
updateNetworkACLItemwithpartialupgrade=falsewrites missing fields as null. Withcidrlistortraffictypeomitted, the rule row is saved before the CIDR update fails. That leaveslistNetworkACLsfailing for the whole list until the rule is fixed. A missing protocol gives an NPE. An ICMP type given withprotocol=tcpis silently dropped, whilecreateNetworkACLrefuses it.📊 Assessment
updateNetworkACLItemand VPC ACL storagelistNetworkACLsfor the whole list🔗 Similar issues
💡 Notes and suggestions
partialupgrade=false protocol=udponly, then calllistNetworkACLs.Add this agentic workflow to your repo
To install this agentic workflow, run