Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Creepy iPhone bug: front facing camera takes pictures by itself. (discussions.apple.com)
101 points by monochromatic on April 6, 2011 | hide | past | favorite | 46 comments


I haven't developed on iOS but I remember reading someplace that when an app is loading it can display an image of what it looked like when the user most recently left it, in order to give the appearance of loading more quickly. I think it was one of Marco Arment's blog posts, but his site isn't available right now.

Anyway I also don't have an iPhone 4, but FaceTime for OS X shows the camera view whenever it's on so that you can see yourself whenever starting a call. I imagine FaceTime for iOS does something similar.

If you combine those two things, you get one possible explanation for what's going on. One that's pretty benign, but should probably still be avoided because it obviously spooks users. Oh, and it should probably be at the API level so that the last thing an app saves is never camera data.


That's not what's going on here. Some of the pictures that it's been showing me have come from times that I definitely wasn't using facetime (one was from while I was driving, even). Something is triggering it to take a picture, but it's not facetime.


I've got a cheap Samsung phone that takes phantom photos too. Why I'm not worried?

A: It's front-facing, so it's never of me.

B: The phone is completely worthless, so it never takes decent photos anyways. (Generally of my pocket.)

The only reason people are spooked is that Apple has higher expectations (also, tribal instinct). My buddy's Nexus phone module will crash constantly, requiring a reboot before use of the camera. His response: "Eh, whatever."


This is exactly why I left the Android world. These kinds of engineering blunders were acceptable to vendors.

Apple's no golden child, as this bug demonstrates, but they're orders of magnitude better. HTC probably would've just let it be, in all honesty.


Let's not drag this discussion into an Android bash-fest please.


Agreed, this is an Apple bash-fest. Stay on topic folks.


Other than saying my friend is a casual user of Android, I see nothing in my statement that bashes either Apple or Android. (Samsung, on the other hand...)

Apparently one camp or the other is fairly touchy.


It would be nice if someone could look into the iPhone's exact behavior in this regard. The FaceTime app on the new iPad doesn't seem to save an actual camera image with the screenshot on quitting. The UI comes up but the whole screen is just dark for a split second before it displays the live camera image. This is true whether you quit the app explicitly or just quickly close it and come back.


The built-in Mail app does this (stored screenshot of current app state), but 3rd-party apps do not have this ability.

3rd-party apps can display a single static image (default.png) on boot. It is common for this image to be a screenshot of the UI without any content (e.g. nav bar, toolbars, but no buttons or data) in order to give the impression of a faster/more-progressive loading process.

I don't know how it is implemented under the hood, but Facetime on iOS does not appear to be a separate app (from the user perspective, at least). Someone who has jailbroken their phone and inspected the filesystem may be able to speak to this point more directly.

Fast app switching, depending on memory availability, does sometimes freeze an app and save state to stable storage. It's possible that this is a source of the rogue image data. A quick test with Instagram suggests that the camera is disabled when an app is "backgrounded." Perhaps Apple's built-in apps (e.g. Phone, Facetime) behave differently.


FYI, you don't need to jailbreak your phone to see what apps are on your phone or what they're doing. Just load up Instruments.app


Is this something built-in or on the app store? I can't find it on my iPhone (v.latest) or on the store.


it's an app that comes with xcode. you start it on your mac and attach it to your iphone & it will show you things like activity monitor does, but for your phone.


Thanks - I'll check that out.


This does happen: iOS writes a snapshot of the screen when an app moves to the background. You can notice that when you open an app that you ran recently and a stale, slightly artifacted screen appears briefly before updating. That's the snapshot.

But this is at the OS level, an app has no control over it, and it's irrelevant for the whole camera thing.


Apps created outside of Apple and in the App Store have no way to change what graphic is shown when the app is launching. You can display a static image (Default.png), but that cannot be dynamically modified later.


This is irrelevant. The bug happens specifically while using Facetime, an Apple app, so it might be feasible for it to set the last image as the launch image. Also, Apple is notorious for using undocumented APIs in their own apps.


> "I haven't developed on iOS but I remember reading someplace that when an app is loading it can display an image of what it looked like when the user most recently left it"

He noted that was a trick the built-in apps use, that third party apps cannot. IIRC it was in the context of wishing that third party developers were allowed to do the same thing.



While I can't consistently reproduce this issue, I was able to get FaceTime to show up with some random image of myself in the preview of my FaceTime call.

Basically: 1. Open the camera app and flip the camera to yourself. 2. Close the camera app, and call yourself on your Mac's FaceTime app. 3. The image that showed up was of me frozen, from just a few moments prior when I flipped the camera around.

When I first saw this post, I attempted to call a friend, and saw exactly what that first poster in Apple discussions saw, a black screen.

After rebooting it's all "fine" now. (I'm running 4.3.1)


Very interesting. Possibly another aspect to this bug.


If it turns out that one of the installed apps was taking pictures without the user's knowledge, then that's one reason to like the permissions that Android shows you for every app you install: No app can take a picture without requesting the proper camera permissions, and I'm not going to install a game or a music player that requests camera permissions (or anything else totally unnecessary). (For those who don't know, the list of permissions an app requests is presented to you before you install any app.)

iPhone/iPod/iPad users can correct me if I'm wrong and iOS pops up some kind of warning when an app turns on the camera -- I know it pops up a warning under some circumstances at least.


Unless I'm mistaking, an API that let's an app take pictures without the display betraying what's going on doesn't even exist. I don't even think any API exists to take pictures — that doesn't involve the touch of a finger on the display.

Can't explain it though.


In iOS 4, such APIs do exist. I blogged briefly about it here http://www.bunnyhero.org/2010/08/17/thoughts-on-ios4-camera/ (I used the API for a test app that uses the front camera to detect how much light is shining on the iPhone http://www.bunnyhero.org/2010/08/15/turn-your-iphone-into-a-... )


But why would Facetime be using this? It seems unnecessary.


The theory is not that Facetime is using this API but that another malicious app is using it to take pics without the user consent.

Then Facetime is loading those pics on startup because they were the last pic taken with the phone.


Hmm, okay, but doesn't that sound kind of strange too? Why would FaceTime use an image from the camera roll instead of one from its own cache?


The linked thread says the image being displayed is not in the camera roll. so maybe some sort of weird caching issue?


Yes, there is an api to take a picture without pressing the screen. It's called -(void) takePicture and it's part of the uiimagepickercontroller class.

http://developer.apple.com/library/ios/#documentation/UIKit/...


If I remember correctly, Color is eventually planning to passively gather audio information as you walk around in order to better know where you're at and what you're doing. Wouldn't it be funny if it was the app causing this?


Are you serious? That's the creepiest thing I've heard yet. Why would anyone want that?


They do this already. It allows the phone to detect whether you're in the same place as someone else: if two phones are hearing similar sound, then you're likely to be next to each other. Color shows you photos taken by people near you. Audio is one signal for detecting who's near.

Note: GPS sometimes doesn't work indoors, where there's no line of sight to the satellites in the sky. Cell towers and Wi-Fi work, but aren't as precise.


Huh. Depending on what they do with the audio input, that might be illegal in Massachusetts. (Our wiretap law requires all parties to consent, and it applies to any covert audio recording, not just phone conversations.)


The last post in the thread makes it sound as though an app wasn't even on the display when it happened ("I hit the button to see if anyone called me (no one did) and drove off" - and then later the picture is of him when he hit the button). iOS wizards: if you have an app up, hit the screen lock, and then later hit the home button, is the app unfrozen then, or does it wait until you unlock? I would guess waiting for the unlock based on how it looks on my iphone.

If it does wait til you unlock, it's probably an iOS bug. If it doesn't, let's look askance at their list of installed applications, particularly the ones that use the camera and that people were likely to have been using shortly before locking their screen (a guess, based on their lists: facebook).


The iPhone doesn't issue a warning when the camera is turned on. Like the others though, I've never seen a case where an app took a picture without showing me the camera and hitting a button myself, so I don't know what's going on.

And I doubt permissions would fix anything for most users - users tend to agree to anything.


The app in question is a video calling app. You would be giving it camera privileges if you intended to use it.


"there is no indication to the user at all that the camera is in use unless the app provides its own. There is no permission alert, nor any LED indicator like a webcam. An app could secretly be recording your face with the iPhone 4′s front-facing camera and sending it to who knows where."

http://www.bunnyhero.org/2010/08/17/thoughts-on-ios4-camera/

As a fellow iOS developer, I believe this is true. It's pretty amusing that there's a guy on the Apple Discussions forum claiming that this is impossible. Actually, it's very possible.


Could it be some kind of buffer with the previous image data held in memory?


This does seem most likely, but the other thing is that this previous image data is from times when no-one was using the camera. So the question is where did the previous image data come from?


My first guess at an explanation would be that the camera is actually a self-contained little image/video engine that's "running" (i.e., capturing images internally) anytime the phone is powered up, and that under certain circumstances tickled by FaceTime, polling the camera engine results in a cached frame getting kicked out of a camera-internal buffer.

Mind you, that's based on absolutely no actual understanding of the hardware, software or APIs involved.


I don't know if this is malware, but I wouldn't be surprised at all.

In fact I'm surprised it isn't happening more often (especially to jailbroken iPhones and Android devices), it seems that smartphones are a perfect target.


Two reasons: Apple's approval process and the paper trail.

The approval process, while not guaranteed to catch malware, serves as a deterrent to evildoers because they know that at least some review will be made of their app, functionally as well as on an API-level.

There is a paper trail from each app to the developer responsible for it. When your app gets caught, you get caught.

It'd take a remarkably stupid evildoer to develop malware and submit it for Apple approval. It's less of a hassle and much less risky to be evil using other traditional channels, with no oversight; like exploiting browser bugs, building native programs that don't require neither the paper trail or an approval process (maybe masking as a "driver" or a "plugin" you need to watch some shady porn or whatever), spam, fraud and other schemes, etc.

For these reasons, it doesn't surprise me that we've seen no malware on iOS.


I know, that's why I said jailbroken iOS and Android.

* Jailbroken users get their apps from third party sources and there are no more guarantees.

* Android Market doesn't do malware checks (yet), and there was an issue with malware recently.

Still, not even the AppStore is perfect: somone snuck in a tethering app disguised as a flashlight, if I remember correctly and there was a problem with a book vendor that was gaming the top lists.


Right, but neither of those hurt users, so not malware without stretching the definition of the word.

I don't think malware on jailbroken iOS or Android happens much because most people who jailbreak are technically savvy. Also, they're a relatively tiny minority.


If the App store approval process didn't catch a friggin tethering app disguised as a flashlight app, it seems highly unlikely it's gonna be any barrier to malware.


I never said that, not even anything close to it. If you read beyond the first sentence it should be pretty clear.


"It's a feature, not a bug"

If they can't build the permissioning around their apps immediately, it will be a good idea to list the phone resources (camera, voice, speakers, etc) that an app uses on the app store page.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: