Nick Arnott couldn't figure out recently why Apple kept rejecting an update to a mobile app his company developed.
It turned out the problem was a ghost in the machine.
His company, Possible Mobile, is well versed in the App Store submission rules and has built apps for JetBlue, Better Homes & Gardens and the Major Soccer League.
The rejection came after it was discovered in mid-September that thousands of apps in the App Store had been built with a counterfeit version of an Apple development tool, Xcode.
The fake version, dubbed XcodeGhost and probably developed in China, had been downloaded by many developers from third-party sources, apparently because getting the 4GB code from Apple took too long.
Security researchers found that apps with XcodeGhost posed a privacy risk, as the apps could easily be configured to record data from people's devices and send it to a remote server.
The entry of more than 4,000 XcodeGhost-infected apps into the App Store marked one of the most successful breaches of Apple's stringent security checks, threatening to undermine the company's years-long efforts to keep the store free of malware.
After its app was rejected, Possible Mobile set out to find out why and detailed its efforts in a blog post.
Apple had indicated it had something to do with XcodeGhost. But Arnott and his team were stumped: The version of Xcode they were using was the legitimate one. They reinstalled fresh versions of Xcode on several machines, but Apple still rejected the app.
Making a mobile app is a bit like making sausage: A lot of code frameworks and libraries developed by other companies are used for functions like ad serving and video delivery.
Those frameworks often come as binaries, and developers have no visibility into what is actually in the source code, said Jay Graves, Possible Mobile's CTO, in a phone interview.
"Any of the top apps from top brands on the App Store are going to have something from a third party," Graves said.
Trying to figure out what is in a binary is what security researchers do, not app developers, Graves said. After scratching their heads, they guessed that the problem was probably in a third-party framework.
The framework had been compiled with a tainted Xcode version, and that code was subsequently incorporated into the app by Possible Mobile. After being alerted, the company that developed the framework fixed the problem and delivered a clean version, Graves said.
Apple can now detect apps infected with XcodeGhost. But there's already an improved version of XcodeGhost that tries to make it harder to analyze and detect.
"Every once in a while, you hear about something getting into the App Store that isn't supposed to be there," Arnott said. "But there's kind of an endless list of tricks that malicious developers can use to try to get this stuff past Apple's review process."
To figure out if the third-party framework was the culprit, Possible Mobile had used a command-line tool, grep, to find the URLs that XcodeGhost was programmed to contact, Arnott said.
"The problem with that sort of approach is once those strings change," Arnott said. "We don't necessarily have a solution for that."
The cat-and-mouse game will pose challenges for Apple and developers, Graves said. Apple's guidance can be vague when apps are rejected, probably to prevent attackers getting tipped off about Apple's security processes.
"This story is definitely not over," Graves said. "It's taken a while, but with the proliferation of mobile and iOS being a high-value target, they're seeing a lot more attention from the black-hat society."