an invention by thardeck
I have Raspberry Pi with WLAN and an additional network module which can be run as a WIFI access point.
Plan
- Analyze the security of HTTPS connections of common Linux applications I use besides webbrowsers. For example check if they verify the SSL certificates, prevent downgrade attacks and so on.
- Analyze the traffic of my smartphone. For example check if apps use SSL connections, if they verify certificates or pin their own ones.
- Analyze the traffic of "smart" devices like Smart TVs and WLAN speakers.
Current Results
Linux applications
All linux utils I have tested where verifying the CA properly and not accepting the man in the middle certificate, which is great.
I have tested: curl
, wget
, osc
, zypper
, rpm
, git
, bundle install
, go get
If you know other relevant tools let me know.
Smartphone applications
At least on iOS there does not seem to be any app which does not verify the certificate which is great but expected.
Most do not seem to use Certificate pinning so I was able to watch most of their SSL traffic. It is interesting how many tracker are contacted from a regular app (even the ones with paid services).
The only exception I have found so far which used certificate pinning is Threema and also does not contact any trackers.
It is a little frighting how many different tracking sites are used by just one app. Some apps have a hidden button somewhere to disable tracking but usually there is not much someone can do.
Most also have a static ID or cookie id which can only be renewed by reinstalling the app.
The good news is that at least on iOS all the apps I have checked use exclusively encrypted connections and verify the certificate properly.
Apple seems to use an unknown binary format to transfer data and some connections like one to the iTunes server are not possible to intercept because of certificate pinning. This is something which needs more time to check out I suppose.
I have not intercepted an Android phone yet but I guess the SSL verification will be similar good, at least on the newer models. The question is if they enforce similar policies to encrypt as Apple does for the app developers.
Smart devices
PS4
The traffic is mostly encrypted and the certificate verified properly.
There are some HTTP connection though like for checking for new PS4 updates. But I am pretty sure that they verify the update files before installing them so it should be not an issue.
Additionally some "sticker" urls are provided unencrypted as json.
Smart TV
A LG Smart TV from 2016 does verify all HTTPs connections. HTTP was nearly not use except of for the Netflix app, but the master token seemed to be signed and it also tried to connect to an HTTPs Netflix server so I suppose it should be no problem.
The TV does also connect to an LG ad server but I could not intercept the traffic because it was also encrypted.
WLAN Speaker
The WLAN speakers are the first device which do not verify all HTTPs requests. Some https connections can be intercepted, others not. I will contact the support regarding this issue.
They also request the time via HTTP, which is interesting since there is Linux running on them and they could use NTP.
The also transfer a device ID and the services you have activated. These are transferred through an HTTPs connection but the certificate is not verified.
I have tried to understand the workings of Spotify Connect in detail but they do not seem to use HTTP[s] connections for streaming. Spotify also initiates one HTTP connection in the beginning but it is called esdk-fire-and-forget and there is no response which does make sense from the url name. I have to follow up on Spotify Connect with Wireshark.
In general the speakers have the issue that during the first setup through Wifi they transfer the WPA password in clear text through the air because they do not support WPS.
Wifi Printer from 2005
This was a pleasant surprise that the HP printer (which besides the age supports WPA2) did not connect to any Internet server at all. It did just send SSDP announcements to multicast ip ranges and that was it.
There is an HP Instant Share option in the menu but it seems it needed to be installed separately.
Sadly I could not check it with a more recent HP model but I am pretty sure they are much more talkative. At least I had to disable quite some online services in an HP Envy printer I have setup and I am pretty sure there is more.
The HP app for example does have quite some data sharing options enabled by default and even if you disable them it connects to facebook although this might be just related to some Facebook functionality in the app.
Looking for hackers with the skills:
This project is part of:
Hack Week 15
Activity
Comments
Be the first to comment!
Similar Projects
Contributing to Linux Kernel security by pperego
Description
A couple of weeks ago, I found this blog post by Gustavo Silva, a Linux Kernel contributor.
I always strived to start again into hacking the Linux Kernel, so I asked Coverity scan dashboard access and I want to contribute to Linux Kernel by fixing some minor issues.
I want also to create a Linux Kernel fuzzing lab using qemu and syzkaller
Goals
- Fix at least 2 security bugs
- Create the fuzzing lab and having it running
The story so far
- Day 1: setting up a virtual machine for kernel development using Tumbleweed. Reading a lot of documentation, taking confidence with Coverity dashboard and with procedures to submit a kernel patch
- Day 2: I read really a lot of documentation and I triaged some findings on Coverity SAST dashboard. I have to confirm that SAST tool are great false positives generator, even for low hanging fruits.
- Day 3: Working on trivial changes after I read this blog post:
https://www.toblux.com/posts/2024/02/linux-kernel-patches.html. I have to take confidence
with the patch preparation and submit process yet.
- First trivial patch sent: using strtruefalse() macro instead of hard-coded strings in a staging driver for a lcd display
- Fix for a dereference before null check issue discovered by Coverity (CID 1601566) https://scan7.scan.coverity.com/#/project-view/52110/11354?selectedIssue=1601566
- Day 4: Triaging more issues found by Coverity.
- The patch for CID 1601566 was refused. The check against the NULL pointer was pointless so I prepared a version 2 of the patch removing the check.
- Fixed another dereference before NULL check in iwlmvmparsewowlaninfo_notif() routine (CID 1601547). This one was already submitted by another kernel hacker :(
- Day 5: Wrapping up. I had to do some minor rework on patch for CID 1601566. I found a stalker bothering me in private emails and people I interacted with me, advised he is a well known bothering person. Markus Elfring for the record.
Wrapping up: being back doing kernel hacking is amazing and I don't want to stop it. My battery pack is completely drained but changing the scope gave me a great twist and I really want to feel this energy not doing a single task for months.
I failed in setting up a fuzzing lab but I was too optimistic for the patch submission process.
The patches
Model checking the BPF verifier by shunghsiyu
Project Description
BPF verifier plays a crucial role in securing the system (though less so now that unprivileged BPF is disabled by default in both upstream and SLES), and bugs in the verifier has lead to privilege escalation vulnerabilities in the past (e.g. CVE-2021-3490).
One way to check whether the verifer has bugs to use model checking (a formal verification technique), in other words, build a abstract model of how the verifier operates, and then see if certain condition can occur (e.g. incorrect calculation during value tracking of registers) by giving both the model and condition to a solver.
For the solver I will be using the Z3 SMT solver to do the checking since it provide a Python binding that's relatively easy to use.
Goal for this Hackweek
Learn how to use the Z3 Python binding (i.e. Z3Py) to build a model of (part of) the BPF verifier, probably the part that's related to value tracking using tristate numbers (aka tnum), and then check that the algorithm work as intended.
Resources
- Formal Methods for the Informal Engineer: Tutorial #1 - The Z3 Theorem Prover and its accompanying notebook is a great introduction into Z3
- Has a section specifically on model checking
- Software Verification and Analysis Using Z3 a great example of using Z3 for model checking
- Sound, Precise, and Fast Abstract Interpretation with Tristate Numbers - existing work that use formal verification to prove that the multiplication helper used for value tracking work as intended
- [PATCH v5 net-next 00/12] bpf: rewrite value tracking in verifier - initial patch set that adds tristate number to the verifier
Migrate from Docker to Podman by tjyrinki_suse
Description
I'd like to continue my former work on containerization of several domains on a single server by changing from Docker containers to Podman containers. That will need an OS upgrade as well as Podman is not available in that old server version.
Goals
- Update OS.
- Migrate from Docker to Podman.
- Keep everything functional, including the existing "meanwhile done" additional Docker container that is actually being used already.
- Keep everything at least as secure as currently. One of the reasons of having the containers is to isolate risks related to services open to public Internet.
- Try to enable the Podman use in production.
- At minimum, learn about all of these topics.
- Optionally, improve Ansible side of things as well...
Resources
A search engine is one's friend. Migrating from Docker to Podman, and from docker-compose to podman-compose.
Kanidm: A safe and modern IDM system by firstyear
Kanidm is an IDM system written in Rust for modern systems authentication. The github repo has a detailed "getting started" on the readme.
In addition Kanidm has spawn a number of adjacent projects in the Rust ecosystem such as LDAP, Kerberos, Webauthn, and cryptography libraries.
In this hack week, we'll be working on Quokca, a certificate authority that supports PKCS11/TPM storage of keys, issuance of PIV certificates, and ACME without the feature gatekeeping implemented by other CA's like smallstep.
For anyone who wants to participate in Kanidm, we have documentation and developer guides which can help.
I'm happy to help and share more, so please get in touch!
Bot to identify reserved data leak in local files or when publishing on remote repository by mdati
Description
Scope here is to prevent reserved data or generally "unwanted", to be pushed and saved on a public repository, i.e. on Github, causing disclosure or leaking of reserved informations.
The above definition of reserved or "unwanted" may vary, depending on the context: sometime secret keys or password are stored in data or configuration files or hardcoded in source code and depending on the scope of the archive or the level of security, it can be either wanted, permitted or not at all.
As main target here, secrets will be registration keys or passwords, to be detected and managed locally or in a C.I. pipeline.
Goals
Detection:
- Local detection: detect secret words present in local files;
- Remote detection: detect secrets in files, in pipelines, going to be transferred on a remote repository, i.e. via
git push
;
Reporting:
- report the result of detection on stderr and/or log files, noticed excluding the secret values.
Acton:
- Manage the detection, by either deleting or masking the impacted code or deleting/moving the file itself or simply notify it.
Resources
- Project repository, published on Github (link): m-dati/hkwk24;
- Reference folder: hkwk24/chksecret;
- First pull request (link): PR#1;
- Second PR, for improvements: PR#2;
- README.md and TESTS.md documentation files available in the repo root;
- Test subproject repository, for testing CI on push [TBD].
Notes
We use here some examples of secret words, that still can be improved.
The various patterns to match desired reserved words are written in a separated module, to be on demand updated or customized.
[Legend: TBD = to be done]
Remote control for Adam Audio active monitor speakers by dmach
Description
I own a pair of Adam Audio A7V active studio monitor speakers. They have ethernet connectors that allow changing their settings remotely using the A Control software. From Windows :-( I couldn't find any open source alternative for Linux besides AES70.js library.
Goals
- Create a command-line tool for controlling the speakers.
- Python is the language of choice.
- Implement only a simple tool with the desired functionality rather than a full coverage of AES70 standard.
TODO
- ✅ discover the device
- ❌ get device manufacturer and model
- ✅ get serial number
- ✅ get description
- ✅ set description
- ✅ set mute
- ✅ set sleep
- ✅ set input (XRL (balanced), RCA (unbalanced))
- ✅ set room adaptation
- bass (1, 0, -1, -2)
- desk (0, -1, -2)
- presence (1, 0, -1)
- treble (1, 0, -1)
- ✅ set voicing (Pure, UNR, Ext)
- ❌ the Ext voicing enables the following extended functionality:
- gain
- equalizer bands
- on/off
- type
- freq
- q
- gain
- ❌ udev rules to sleep/wakeup the speakers together with the sound card
Resources
- https://www.adam-audio.com/en/a-series/a7v/
- https://www.adam-audio.com/en/technology/a-control-remote-software/
- https://github.com/DeutscheSoft/AES70.js
- https://www.aes.org/publications/standards/search.cfm?docID=101 - paid
- https://www.aes.org/standards/webinars/AESStandardsWebinarSC0212L20220531.pdf
- https://ocaalliance.github.io/downloads/AES143%20Network%20track%20NA10%20-%20AES70%20Controller.pdf
Result
- The code is available on GitHub: https://github.com/dmach/pacontrol