Last Modified: Mar 18, 2025
Affected Product(s):
BIG-IP LTM
Known Affected Versions:
15.1.0, 15.1.0.1, 15.1.0.2, 15.1.0.3, 15.1.0.4, 15.1.0.5, 15.1.1, 15.1.2, 15.1.2.1, 15.1.3, 15.1.3.1, 15.1.4, 15.1.4.1, 15.1.5, 15.1.5.1, 15.1.6, 15.1.6.1, 15.1.7, 15.1.8, 15.1.8.1, 15.1.8.2, 15.1.9, 15.1.9.1, 15.1.10, 15.1.10.2, 15.1.10.3, 15.1.10.4, 15.1.10.5, 15.1.10.6, 16.1.0, 16.1.1, 16.1.2, 16.1.2.1, 16.1.2.2, 16.1.3, 16.1.3.1, 16.1.3.2, 16.1.3.3, 16.1.3.4, 16.1.3.5, 16.1.4, 16.1.4.1, 16.1.4.2, 16.1.4.3, 16.1.5, 16.1.5.1, 16.1.5.2, 17.0.0, 17.0.0.1, 17.0.0.2, 17.1.0, 17.1.0.1, 17.1.0.2, 17.1.0.3, 17.1.1, 17.1.1.1, 17.1.1.2, 17.1.1.3, 17.1.1.4, 17.1.2, 17.1.2.1, 17.5.0
Opened: Aug 10, 2023 Severity: 4-Minor
Under specific conditions, when the client accesses an HTTP(S) virtual server, an iRule execution error occurs. Client-side HTTP(S) connection is terminated by RST when an iRule execution error occurs. err tmm[xxxxx]: 01220001:3: TCL error: /Common/test-rule <HTTP_REQUEST> - ERR_VAL (line 1) invoked from within "HTTP::path"
The iRule execution fails with a TCL error, as shown in the example below, and the client will receive a TCP RST from the virtual server when the iRule fails to execute. err tmm[xxxxx]: 01220001:3: TCL error: /Common/test-rule <HTTP_REQUEST> - ERR_VAL (line 1) invoked from within "HTTP::path"
This issue occurs under the following conditions: -- HTTP::path command is used on an iRule. -- The iRule is attached to an HTTP(S) virtual server. -- Client's HTTP(S) request URI includes square bracket character, "[" (0x5b) or "]" (0x5d). -- Client's HTTP(S) request URI includes only opening square bracket "[" or only closing square bracket "]", for example, "GET [ HTTP/1.0\r\n\r\n". NOTE: When an explicit proxy is configured in the HTTP profile, a client request containing only an opening square bracket "[" will result in the BIG-IP responding with a 400 Bad Request error. In this case, the TCL error may not be visible.
Add "-normalized" command option to HTTP::path command. ltm rule /Common/test-rule-normalized { when HTTP_REQUEST { if { [HTTP::path -normalized] contains "test" } { HTTP::respond 200 -content "OK !!!\n" } else { HTTP::respond 200 -content "Hit \"else\" statement !!!\n" } } } Note: Adding the "-normalized" command option can change the URI, therefore it is highly recommended to thoroughly test and verify its behaviour before implementing the workaround in a production environment.
None