HandBrake hack affects Mac app developer Panic

Handbrake was hacked and infected with malware, which was then downloaded by Panic, and now, unofficial Panic apps might be compromised.

Mac app developer Steven Frank of Panic, Inc. announced on the company blog that, through an incredible run of bad luck, he managed to download an infected copy of Handbrake during the three day window it was hacked and infected by malware. Panic is the maker of Coda, Transmit, Prompt, and Firewatch.

Popular video transcoder Handbrake had posted a security warning that its program was hacked. Anyone that downloaded Handbrake between May 2 and May 6 were told to verify the app is not infected by a trojan. Unfortunately, Frank got that trojan.

In a case of extraordinarily bad luck, even for a guy that has a lot of bad computer luck, I happened to download HandBrake in that three day window, and my work Mac got pwned.

Frank clarifies that no customer information was stolen, no sync data from Panic was accessed, and their web servers were not compromised. Additionally, Frank reminds us that Panic never stores credit card numbers and Panic Sync data is encrypted so that even the company can’t access it.

Frank details the number of mistakes he made, which ultimately led to downloading the malware onto his computer.

I managed to download … an in-retrospect-sketchy authentication dialog, without stopping to wonder why HandBrake would need admin privileges, or why it would suddenly need them when it hadn’t before. I also likely bypassed the Gatekeeper warning without even thinking about it, because I run a handful of apps that are still not signed by their developers. And that was that, my Mac was completely, entirely compromised in 3 seconds or less.

Through the downloaded malware, the attackers were able to steal Panic’s GitHub credentials and used them to clone sever of the company’s source code repositories.

The attackers sent an email to Panic with a demand for a “large bitcoin ransom to prevent the release of the source code.”

They didn’t pay. Instead, Panic contacted the FBI and Apple directly. Apple helped the dev team and quickly dispatched a security team to address the issue.

The right people at Apple are now standing by to quickly shut down any stolen/malware-infested versions of our apps that we may discover.

Panic requests that, if anyone comes across an unofficial version of its apps to get in touch.

Frank reminds everyone to only download apps directly from the Mac app store or from official sources to avoid downloading malicious content. He also reminds us how important it is to be aware of our download activities.

I kick myself every day for not paying attention to what I was doing; the tells were obvious in hindsight. It’s a good reminder though — no matter how experienced you might be with computers, you’re human, and mistakes are easily made. And even though this doesn’t affect our customers directly, we want to apologize that we’re even having to have this discussion with you.

<!–*/

<!–*/

img {
width: 100%;
height: auto;
}
.devicebox ul {
display: table;
margin: 0 0 10px;
width: 100%;
}
.devicebox ul li {
background: #f7f7f7;
margin: 2px 0;
padding: 4px 15px;
}
.devicebox ul li:hover {
background: #fff;
}
.devicebox ul li:before {
display: none;
}
.devicebox p ~ p {
line-height: 1.25;
}
.devicebox p:first-of-type + p {
padding: 15px;
}
.devicebox a.buy-link {
border-radius: 5px;
display: inline-block;
font: 14px/31px “Proxima Nova Extrabld”,Helvetica,Arial,sans-serif;
text-align: center;
}
.devicebox a.buy-link,
.devicebox a.buy-link:link,
.devicebox a.buy-link:active,
.devicebox a.buy-link:visited {
background: #37B5D7;
color: #FFF;
}
.devicebox a.buy-link:hover {
background: #2694B2;
text-decoration: none;
}
.devicebox a.buy-link:before {
content: “e61e”;
font: 40px/0 “ac_iconset” !important;
margin: 0 3px 0 -8px;
vertical-align: middle;
}
@media all and (min-width: 1025px), all and (max-width: 800px) and (min-width: 660px) {
/* div:not(.columns-3) excludes help menu content */
.article-body-wrap > div:not(.columns-3) > *:first-child:not(.sticky-wrapper) .devicebox {
padding: 20px 0 25px;
}
.article-body-wrap > div:not(.columns-3) > *:first-child:not(.sticky-wrapper) .devicebox .video {
float: left;
margin: 0 30px 0 0;
width: calc(100% – 375px);
}
.article-body-wrap > div:not(.columns-3) > *:first-child:not(.sticky-wrapper) .devicebox h3 + p {
bottom: 37px;
display: block;
overflow: hidden;
position: absolute;
top: 60px;
width: calc(100% – 375px);
}
.article-body-wrap > div:not(.columns-3) > *:first-child:not(.sticky-wrapper) .devicebox p img,
.article-body-wrap > div:not(.columns-3) > *:first-child:not(.sticky-wrapper) .devicebox p > img {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.article-body-wrap > div:not(.columns-3) > *:first-child:not(.sticky-wrapper) .devicebox p:nth-child(n+3),
.article-body-wrap > div:not(.columns-3) > *:first-child:not(.sticky-wrapper) .devicebox ul {
box-sizing: border-box;
margin-left: calc(100% – 345px);
width: 340px;
}
.article-body-wrap > div:not(.columns-3) > *:first-child:not(.sticky-wrapper) .devicebox p.list-head {
margin-top: -5px;
}
}
@media all and (max-width: 1024px) and (min-width: 801px), all and (max-width: 660px) {
.devicebox h3 {
text-align: center;
}
.devicebox ul,
.devicebox p {
display: block;
}
}
@media all and (max-width: 800px) and (min-width: 660px) {
.devicebox {
padding: 20px 0 25px;
}
.devicebox .video {
float: left;
margin: 0 30px 0 0;
width: calc(100% – 375px);
}
.devicebox h3 + p {
bottom: 37px;
display: block;
overflow: hidden;
position: absolute;
top: 60px;
width: calc(100% – 375px);
}
.devicebox p img,
.devicebox p > img {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
.devicebox p:nth-child(n+3),
.devicebox ul {
box-sizing: border-box;
margin-left: calc(100% – 345px);
width: 340px;
}
.devicebox p.list-head {
margin-top: -5px;
}
}
@media all and (min-width: 1025px), all and (max-width: 800px) and (min-width: 661px), all and (max-width: 500px) {
/* 2x buy buttons */
.devicebox a.buy-link {
width: calc(50% – 2.5px);
margin: 0 5px 5px 0;
}
.devicebox a.buy-link:nth-of-type(even) {
margin: 0 0 5px 0;
}
.devicebox a.buy-link:last-of-type:nth-of-type(odd) {
width: 100%;
}
}
@media all and (max-width: 1024px) and (min-width: 801px), all and (max-width: 659px) and (min-width: 501px) {
/* 3x buy buttons */
.devicebox a.buy-link {
width: calc(100%/3 – 10px/3);
margin: 0 5px 5px 0;
}
.devicebox a.buy-link:nth-of-type(3n):not(:nth-last-of-type(2)) {
margin: 0 0 5px 0;
}
.devicebox a.buy-link:only-child {
width: 100%;
margin: 0 0 5px 0;
}
.devicebox a.buy-link:nth-last-of-type(2):nth-of-type(3n+1),
.devicebox a.buy-link:nth-last-of-type(2):nth-of-type(3n+1) ~ a.buy-link,
.devicebox a.buy-link:nth-last-of-type(4):nth-of-type(3n+1),
.devicebox a.buy-link:nth-last-of-type(4):nth-of-type(3n+1) ~ a.buy-link {
width: calc(50% – 2.5px);
}
.devicebox a.buy-link:nth-last-of-type(2):nth-of-type(3n+1) ~ a.buy-link,
.devicebox a.buy-link:nth-last-of-type(4):nth-of-type(3n+1) ~ a.buy-link:nth-last-of-type(odd) {
margin: 0 0 5px 0;
}
}
@media all and (max-width: 800px) {
.devicebox {
margin: 0 0 30px;
max-width: none;
width: auto;
}
}
@media all and (max-width: 500px) {
.devicebox {
margin: 0 0 30px;
max-width: none;
width: auto;
}
.devicebox a.buy-link:before {
display: none;
}
}
.page-admin .devicebox {max-width: 350px;}
.page-admin .devicebox .video_iframe {position: relative; height: 0; padding-bottom: 56.9%;}
.page-admin .devicebox .video_iframe iframe {width: 100%; height: 100%; position: absolute;}

/*–>*/

/*–>*/

/*–>*/