🇰🇷 한글 설명
Linux 커널의 netfilter 구성 요소인 nft_ct에서 NAT된 연결에 대한 시퀀스 조정(seqadj) 확장이 누락되는 취약점입니다. 이로 인해 FTP PASV/EPSV 모드 사용 시 패킷 페이로드 변경에 따른 TCP 시퀀스 및 ACK 번호 불일치가 발생하여 연결이 끊어질 수 있습니다.
💡 쉬운 설명
FTP 서비스를 사용할 때 네트워크 주소를 변환(NAT)하는 과정에서 데이터의 순서를 맞추는 기능이 제대로 작동하지 않는 문제입니다. 이로 인해 FTP 연결이 갑자기 끊어지는 현상이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nft_ct: add seqadj extension for natted connections
Sequence adjustment may be required for FTP traffic with PASV/EPSV modes.
due to need to re-write packet payload (IP, port) on the ftp control
connection. This can require changes to the TCP length and expected
seq / ack_seq.
The easiest way to reproduce this issue is with PASV mode.
Example ruleset:
table inet ftp_nat {
ct helper ftp_helper {
type "ftp" protocol tcp
l3proto inet
}
chain prerouting {
type filter hook prerouting priority 0; policy accept;
tcp dport 21 ct state new ct helper set "ftp_helper"
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority -100; policy accept;
tcp dport 21 dnat ip prefix to ip daddr map {
192.168.100.1 : 192.168.13.2/32 }
}
chain postrouting {
type nat hook postrouting priority 100 ; policy accept;
tcp sport 21 snat ip prefix to ip saddr map {
192.168.13.2 : 192.168.100.1/32 }
}
}
Note that the ftp helper gets assigned *after* the dnat setup.
The inverse (nat after helper assign) is handled by an existing
check in nf_nat_setup_info() and will not show the problem.
Topoloy:
+-------------------+ +----------------------------------+
| FTP: 192.168.13.2 | <-> | NAT: 192.168.13.3, 192.168.100.1 |
+-------------------+ +----------------------------------+
|
+-----------------------+
| Client: 192.168.100.2 |
+-----------------------+
ftp nat changes do not work as expected in this case:
Connected to 192.168.100.1.
[..]
ftp> epsv
EPSV/EPRT on IPv4 off.
ftp> ls
227 Entering passive mode (192,168,100,1,209,129).
421 Service not available, remote server has closed connection.
Kernel logs:
Missing nfct_seqadj_ext_add() setup call
WARNING: CPU: 1 PID: 0 at net/netfilter/nf_conntrack_seqadj.c:41
[..]
__nf_nat_mangle_tcp_packet+0x100/0x160 [nf_nat]
nf_nat_ftp+0x142/0x280 [nf_nat_ftp]
help+0x4d1/0x880 [nf_conntrack_ftp]
nf_confirm+0x122/0x2e0 [nf_conntrack]
nf_hook_slow+0x3c/0xb0
..
Fix this by adding the required extension when a conntrack helper is assigned
to a connection that has a nat binding.
📍 영향받는 시스템
Linux kernel (netfilter/nft_ct 관련 모듈 사용 시스템)
⚔️ 공격 벡터
직접적인 공격보다는 네트워크 설정 오류로 인한 서비스 거부(DoS) 또는 연결 실패 유발
🛡️ 대응 방법
커널 업데이트를 통해 nft_ct에 seqadj 확장을 추가하는 패치를 적용해야 합니다.
🔧 검증 코드
현재 사용 중인 커널 버전을 확인하여 해당 취약점이 해결된 최신 보안 패치 버전인지 확인합니다.