Skip to content

link2linux 0.1.2

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 26 Oct 18:15
· 47 commits to main since this release
0f73654

Security fixes from a review of pairing, connections and notifications on
both apps, and fixes for crashes and for the phone not keeping to its
"Stay connected" switch.

Security

None of these was known to be exploited.

  • Pairing: a forged message during a reconnect can no longer make the
    computer think the phone removed it, and the phone's real refusal is now
    recognised. Someone answering a QR code's announcement can no longer end
    it. Pairing by code no longer replaces a phone with the same id without
    asking.
  • Connections: both apps check a message's size and repeated fields
    before decoding it, and keep messages small until the other side is
    paired, so one message can no longer make either app use hundreds of
    megabytes. The computer stops reading from a peer that does not read its
    answers, keeps looking for phones after a flood of fake announcements,
    and never dials its own addresses or a public address it last saw a
    phone at.
  • Phone: its listener closes off Wi-Fi, Ethernet and hotspot networks, and
    connections that have not yet proven who they are have time and number
    limits. A removed computer is cut off before it is told. One paired
    computer can no longer lock another out with a key change.
  • Phone notifications: another app's notification icon can no longer stall
    or crash mirroring, and a computer that stops reading no longer holds up
    the others. One-time-code detection catches letter-only codes and sign-in
    links. Notification keys no longer carry contact details. A new setting,
    "Reply while this phone is locked" (on by default), lets you require an
    unlocked phone for replies and actions from a computer.
  • Computer: what the phone sends is held to the protocol's size limits;
    pictures must be a PNG, JPEG or WebP of a sensible size before they reach
    any image decoder, and their files are private to you. Pop-ups go out
    under link2linux's own name. When the app cannot tell whether the screen
    is locked, it treats it as locked, and locking takes the text off pop-ups
    still on screen. The phones' presence keys are kept sealed with a key
    from your keyring, and the pairing secret stays out of debug output.
  • Releases: the Android signing key never shares a machine with the build,
    and every workflow action is pinned to a fixed version. install.sh
    downloads over HTTPS only.

Fixed

  • The phone app no longer crashes when its camera can't start, or when the
    screen that offers to notice a nearby computer goes away.
  • With "Stay connected" off, the phone no longer opens its listener or
    restarts its connection service when a paired computer comes near, and a
    removed computer no longer wakes the app.
  • On a fresh install, the phone runs nothing in the background until the
    first pairing starts.

Install

Linux desktop, 64-bit x86

Install this version in one line. It picks the .deb on Debian and Ubuntu, the
.rpm on Fedora and openSUSE, and the AppImage elsewhere:

curl -fsSL https://codesensei-tushar.github.io/link2linux/install.sh | L2L_VERSION=v0.1.2 sh

Or download a package below: link2linux_amd64.deb, link2linux.x86_64.rpm,
or link2linux-x86_64.AppImage (which needs FUSE 2).

Android phone, 8.0 and newer

Download link2linux.apk on the phone and open it. If Android asks, allow your
browser to install apps.

Then open link2linux on the desktop and scan the QR code it shows with the
phone.

Verify

sha256sum -c SHA256SUMS --ignore-missing
gh attestation verify link2linux_amd64.deb --repo codesensei-tushar/link2linux

What's Changed

  • Point the website's downloads at 0.1.1 by @codesensei-tushar in #195
  • Keep the release signing key away from the build, and pin every action by @codesensei-tushar in #196
  • Hold what the phone sends to the protocol's limits on the desktop by @codesensei-tushar in #197
  • Keep pop-up text off a locked screen when the lock state is unknown by @codesensei-tushar in #198
  • Close the phone's listener off local networks, and bound connections before they authenticate by @codesensei-tushar in #199
  • Revoke a removed desktop before telling it, and keep pairings from claiming each other's keys by @codesensei-tushar in #200
  • Trust only the phone's own refusal of this desktop's key by @codesensei-tushar in #201
  • Keep the QR code up when someone else answers its announcement by @codesensei-tushar in #202
  • Keep another app's images and a stalled desktop from holding up the phone's notifications by @codesensei-tushar in #203
  • Seal the phones' presence keys with a key from the keyring, and keep the pairing secret out of debug output by @codesensei-tushar in #204
  • Ask the phone only for what it offers, keep replies working while it's locked, and list the security fixes by @codesensei-tushar in #205
  • Check a frame's size and repeated fields before decoding it, and stop reading from a peer that does not read by @codesensei-tushar in #206
  • Keep browsing mDNS after a flood, and bound what forged announcements make the desktop keep and dial by @codesensei-tushar in #207
  • Cap QR pairing connections, keep sealed presence keys sealed, and fix pop-up and mirror edge cases by @codesensei-tushar in #208
  • Stop the image re-render spin and one-time-code false positives, bound every icon, and keep pairing screens from crashing by @codesensei-tushar in #209
  • Free a sender stuck on a desktop that stopped reading, keep the phone to its off switch, and end pairing attempts on any error by @codesensei-tushar in #210
  • Release 0.1.2 by @codesensei-tushar in #211

Full Changelog: v0.1.1...v0.1.2