In some email I received from James MacDonald, sie wrote:
[ Charset ISO-8859-1 unsupported, converting... ]
> We just recieved a note from Cisco stating that they have spoken to the 
> developers (of PIX/FWSM software) and that there is definitely no reason 
> that they should be randomizing the Acknowledgement Number in this way. 
> The developer as asked the TAC engineer to open a Cisco Bug report on 
> the issue. They said it will be months before we see a fix for this bug 
> though ... in the meantime, as I originally asked ... is there a chance 
> we can see a switch put into IPFilter that will ignore this check? This 
> would be a good enough work around for us while we wait for Cisco to 
> update PIX code ...

I think until Cisco have a patch available, the best thing to do (in view
of better interoperability) is to just make this check not have any adverse
side effect.

Darren

Index: fil.c
===================================================================
RCS file: /devel/CVS/IP-Filter/fil.c,v
retrieving revision 2.243.2.22
diff -c -r2.243.2.22 fil.c
*** fil.c       2004/06/17 02:05:37     2.243.2.22
--- fil.c       2004/06/21 00:36:15
***************
*** 930,936 ****
                 * that to indicate a bad TCP packet.
                 */
                if ((flags == TH_SYN) && (tcp->th_ack != 0)) {
!                       fin->fin_flx |= FI_BAD;
                } else if (!(flags & (TH_RST|TH_SYN))) {
                        fin->fin_flx |= FI_BAD;
                } else if ((flags & (TH_URG|TH_PUSH|TH_FIN)) != 0) {
--- 930,943 ----
                 * that to indicate a bad TCP packet.
                 */
                if ((flags == TH_SYN) && (tcp->th_ack != 0)) {
!                       /*
!                        * Cisco PIX sets the ACK field to a random value.
!                        * In light of this, do not set FI_BAD until a patch
!                        * is available from Cisco to ensure that
!                        * interoperability between existing systems is
!                        * achieved.
!                        */
!                       /*fin->fin_flx |= FI_BAD*/;
                } else if (!(flags & (TH_RST|TH_SYN))) {
                        fin->fin_flx |= FI_BAD;
                } else if ((flags & (TH_URG|TH_PUSH|TH_FIN)) != 0) {

Reply via email to