Reverse engineering

IP camera vulnerabilities: leaked credentials and live audio

A January 2018 look at CVE-2017-8225 and CVE-2017-8221: exposed camera credentials, live audio access, FTP command injection and insecure cloud traffic.

Some inexpensive IP cameras expose far more than their owners expect. On affected WIFICAM devices, CVE-2017-8225 exposes configuration files containing login credentials, while CVE-2017-8221 concerns an unencrypted UDP cloud connection. My camera demonstration shows why those weaknesses matter: credentials recovered from a configuration file can be used to access live audio.

Quick answer

  • CVE-2017-8225 allows configuration files to be retrieved without valid login credentials on affected firmware.
  • The exposed system.ini file contains camera settings, including credentials that can open otherwise protected functions.
  • CVE-2017-8221 concerns cleartext communication through the camera's UDP cloud tunnel.
  • FTP command injection and an accessible Telnet service add separate paths to operating-system access.
  • These findings concern affected devices and firmware. Price or country of manufacture alone does not establish that another camera has the same flaws.

A configuration file that gives away the login

The first weakness sits in the camera's HTTP service. A login screen suggests that camera settings require authentication, but the server does not apply that check consistently. Requests for configuration files ending in .ini can succeed with empty username and password parameters.

The CVE-2017-8225 record, published in April 2017, identifies the affected product family as Wireless IP Camera (P2P) WIFICAM. It describes an authentication bypass involving empty loginuse and loginpas parameters. The critical point is that a caller does not need to know the existing password to retrieve the protected information.

In my demonstration, the useful file is system.ini. Inspecting its contents reveals the camera's login credentials alongside its configuration. There is no password guessing stage: the device supplies the information needed to authenticate to it.

That makes changing the camera's password an incomplete response. A stronger password helps against guessing, but it does not repair a path that discloses the stored credential. The access check on the configuration file needs to be fixed, and any exposed credentials need to be changed after that exposure is addressed.

There is also an attribution detail worth getting right. Pierre Kim's March 2017 disclosure explains that the vulnerable HTTP server uses vendor modifications around GoAhead. The advisory attributes these flaws to the camera vendor's custom development, rather than establishing that upstream GoAhead itself has the same vulnerability.

How the credential leak reaches live audio

The audio portion of my demonstration uses audiostream.cgi. Unlike the exposed configuration file, this endpoint requires authentication. On its own, that check looks like a useful boundary: a request without valid credentials should not receive the microphone stream.

The configuration leak defeats that boundary indirectly. Once the credentials have been recovered from system.ini, the audio request can authenticate normally. The camera cannot distinguish its owner from someone who obtained the same login through the earlier disclosure.

My analysis identified the audio stream as ADPCM. That describes how the audio is encoded; it does not provide confidentiality. An encoded stream still needs access controls and transport protection if it is carrying private conversations.

This is the part of the demonstration that makes the impact tangible. A configuration download can sound like a narrow information leak until the disclosed information opens a microphone inside someone's room. The individual endpoints need to be assessed together because one endpoint can expose the secret that another relies on.

The observation is specific to the camera I examined. It does not establish that every IP camera uses this endpoint, the same audio format or the same configuration layout.

FTP settings should not become shell commands

The command-line access in the demonstration comes from another programming error, this time in the FTP upload functionality. A value intended to be FTP configuration reaches a shell script without being handled safely as data.

The shell interprets command substitution inside that value. In the demonstrated case, the injected command starts another Telnet service on port 1234 and connects it directly to /bin/sh. Because that service launches a shell rather than a login program, it does not present the normal authentication prompt.

This is a command-injection flaw. FTP upload settings should describe where and how to upload a file; they should not be able to start an unrelated service on the device. The practical impact extends beyond changing a camera preference because the resulting shell operates at the operating-system level.

My original notes also describe a separate Telnet path on the usual port 23, with a root account using the manufacturer-selected password 123456. On Linux, root has administrative privileges. That account and the injected Telnet service are distinct findings, even though both lead to command-line access.

Disabling one exposed service does not automatically repair the others. A camera could stop offering its original Telnet listener while retaining the FTP injection flaw that allows a new listener to be started.

The cloud connection creates another exposure path

The second CVE concerns communication outside the local network. The camera's cloud feature uses a UDP tunnel, and the protocol carries information without encryption. CVE-2017-8221 describes sensitive information being exposed to an attacker able to observe that network traffic.

UDP itself does not force an application to send private data in cleartext. The problem is the protection implemented by this particular cloud protocol. Calling a feature “cloud access” says nothing about whether its traffic is encrypted or whether the camera correctly checks requests arriving through it.

The 2017 cloud analysis also examines how the tunnel carries camera requests. If a vulnerable camera interface is reachable through that path, its existing authentication weaknesses remain relevant. The tunnel's reachability and the configuration disclosure are separate parts of the exposure.

For an owner, that means local access settings are only part of the picture. A camera that communicates with an external service needs its outbound behavior examined too. Removing a manually configured inbound port forward does not demonstrate that the cloud connection has stopped working.

What these findings mean for an owner

Start with the exact model and firmware revision. A useful vendor response needs to address configuration disclosure, command injection and remote communication where they apply. A general instruction to choose a stronger password does not explain how those defects have been repaired.

For an affected camera, restrict access while checking whether a suitable firmware update exists. Disable unnecessary remote features where the device permits it, and verify the result from the relevant network. If the camera cannot be maintained or its exposure cannot be controlled, keeping it connected in a private space is difficult to justify.

The engineering lesson is equally concrete: protect configuration exports as carefully as the login form, keep user-controlled values out of shell commands, and review the remote-access path alongside the local interface. These are the kinds of system boundaries I investigate in my independent technical work; related projects are collected in my selected work.

Frequently Asked Questions

Does this mean every inexpensive IP camera is vulnerable?

No. These findings concern affected WIFICAM firmware and the camera behavior described in my demonstration. Another device needs its own model, firmware and exposure checks before the same conclusions can be applied.

Will changing the camera password fix CVE-2017-8225?

Changing the password does not fix the configuration-file authentication bypass. If the new credential remains available through the vulnerable file, someone can retrieve it again. Repair or restrict the disclosure path before relying on replacement credentials.

Was the audio endpoint accessible without authentication?

In my demonstration, audiostream.cgi required credentials. The earlier configuration leak supplied those credentials, allowing the subsequent audio request to authenticate successfully.

Is ADPCM a form of encryption?

No. ADPCM is an audio coding method, so identifying the format helps explain how the stream can be decoded. Privacy still depends on authentication, authorization and appropriate protection of the traffic.

About the author

Alexandru Talnaci

Full-stack and systems engineer in Bucharest. Co-founder and technical lead at Legacies, working across web applications, integrations and C++ systems.

Explore the projects behind the notes
Back to all notesSubscribe via RSS