1つのWordPressプラグインをハッキングした歴史-またはプロジェクトで脆弱性を許可する方法

むかしむかし、私が若くてPHPでサイトを書いていたとき、Wordpressの外部リンクをマスクするSEOプラグインを書きました。 想像力が悪いので、WP-NoExternalLinksと呼びました。 その歴史を通して、360,000のインストールがあり、最大50,000のアクティブなインストールがあったようです。



さらに、不正な手に渡り、悪意を持って使用された方法を正確に説明しますが、そのためには、その歴史と開発環境について少し詳しく説明する必要があります。 この話は絶対に本物であることをすぐに警告します。





物語



一見しただけで、プラグインのタスクは基本的なもののようです。実際、多くの異なるマスキングオプションを実装し、キャッシュプラグインで動作し、他のコンテンツパーサー、パーマリンク構造、Wordpressのすべての新しいバージョンなどと競合しないことを確認する必要がありました。さらに。 約8年間、私はこのプラグインをサポートし、バグレポートに対応し、時には信頼できる所有者が自発的にすべてのパスワードと外観を提供してくれた他の人のサイトをデバッグしました。



ある時点で、プラグインで長年タスクを解決していないこと、コードを維持することに興味がないこと、開発から何も得られないことが明らかになりました。 参考までに、説明とプラグインの設定ページには、自発的な寄付を行うための控えめなリンクとボタンがありましたが、プラグインの歴史では40ドル前後だったことを明確にします。 したがって、金銭的な動機も開発の動機もありませんでしたし、何らかの理由で各ユーザーがあなたにプログラムやプラグインをインストールした場合、あなたが彼を借りていると信じているという理由もありません(多くのユーザーは本当に彼らがプログラムをインストールするとすぐに、ある種の曇りの精神が開発者にお金の袋を与えます)。



世界が不公平だということではなく、andりの涙を流しました。数年の間、ユーザーが私を信頼していたという不思議な感覚だけでこのプラグインをサポートしていたことを明確にしています。 これらの感情を今振り返ってみると、それは愚かな感情であり、プラグインを静かに埋めて自分のことをする必要があったことを理解しています。 しかし、これは2018年の私の気持ちです-2人の子供の出現で、優先順位はかなり変わります。







販売中



そしてある時点で、ある市民がやってきて、プラグインの購入にかなりの金額を提供してくれました。 正直なところ、これは詐欺だと確信していたので、好奇心だけで彼と話をしました(ナイジェリアのあらゆる種類の王子と同じように)。 この種のトランザクションに1つの信頼できるサービスを使用することに同意したとき、懐疑論は去りました。 ここですでに興味深いものになりました-彼らは私にお金を払うという気持ちがありましたが、プラグインに何らかの脆弱性がすぐに現れると疑っていました。そのため、プラグインを即座にブロックするためにワードプレスサポートチームに特別に手紙を用意しました。 しかしその頃には、SEOの最適化に取り組んでいる会社のポートフォリオを拡大するためにプラグインを本当に購入したいと思っていました(このモチベーションが私に説明したのです)。



そして、あなたは次に何が起こったのか知っていますか? その後、送金されたお金が正直に私に届き、数日後にプラグインのメジャーアップデートが行われました。インターフェースが完全に変更され、コードベースが修正されました(ただし、互換性は維持されました)。したがって、2010年ではなく2017年のコード(上記)少なくともミドルレベルの開発者がこのために働いていました)。 私は非常に幸せでした-私のおもちゃをサポートしてくれる興味のある人々を見つけました。そして、すでに多くの良いものを持ち込んでおり、プラグインのユーザーを喜ばせています。



それにもかかわらず、2週間の間、私はプラグインのコードとその更新を見ました。念のため、wordpressコマンドに文字を送信することを指で続けました。 しかし、すべてが順調だったと私は落ち着いた。







脆弱性



この場所で立ち止まってサクセスストーリーとして終わらせたいのですが、残念です。 数か月後、サードパーティのワードプレスセキュリティプロジェクトの担当者から連絡があり、プラグインにバックドアが出現したことを教えてくれました。彼らはその権利を新しい開発者にどのように譲渡したのか興味があります。 チェックした後、プラグインがワードプレスサイトで本当にブロックされていることを確認しました。 その後、ワードプレスのサポートに対応しました。簡単な結果は次のとおりです。





ちなみに、ブックマークは決して悪意のあるバックドアではなく、疑いを持たないユーザーにSEOリンクをいくつか追加しただけです。 不快ですが、致命的ではありません。



コミュニケーションの結果によると:





UPD。 プラグインを持っている人の要求に応じて-「ブックマーク」はプラグイン4.2.0-4.2.2のバージョンにあります。 バージョン4.3はワードプレスのサポートにより修正され、4.0より前のバージョンは私のものであり、バージョン4.0.0-4.1.0では「ブックマーク」はまだ追加されていません。 ほとんどの場合、ブログでプラグインが安全なバージョン4.3に既に更新されています。



結論



私にとって最も興味深い質問は、「悪意を持って使用することがわかっている場合、このプラグインを販売しますか?」および「機会があればもう一度やりますか?」でした。 一方では-私はそれを信じたいと思います。 一方、実際には、「私の仕事の結果を使ってくれてありがとうとさえ言わなかった人々に忠誠心を保つ」か「海で休暇中に子供と一緒に行く」かを選択できます。 ええと…分かりません。 誘惑は深刻です。







私にはある種の評判のリスクがあると言えますが、...私はインターネット全体で恥をかかせるような会社ではありません。 そして、私は開発の世界の象徴ではなく、オープンソースで定期的に何かを書いている数百万人の開発者の一人です。 正直に言うと、そうでない評判を失うことはできません。 プラグインを販売した後、少なくとも1つのリソースが私の名前に関連付けられていることは驚くべきことです。 だから-評判バタースコッチはありません。



それとは別に、リスクが私のビジネスに関連している場合、ここでの状況は完全に異なることに注意してください。 私の仕事では、彼らは私にお金を支払い、私には一定の義務があります。 疑わしい性質のさまざまな申し出を繰り返し受けましたが、干渉やデータ転送を追跡できないことがわかっていても、1つの申し出を受け入れませんでした。 商業プロジェクトの前には、まったく異なる程度の責任があります。そして、奇妙なことに、そこで支払われただけでなく、100,500枚の紙に署名したからです。 まず第一に、彼らは私を大切にし、私を信頼し、そしてこれが示されているので、私は責任を感じます。 したがって、私は置かれた信頼を裏切ることはできません。 そして、オープンソースに戻る...ここでは、写真は完全に異なっています。 たとえば、プラグインに加えて、モバイルアプリケーションもあります。 w3bsit3-dns.comなど、いくつかのリソースでサポートされています。 通常、ユーザー(私は数千人)がそこに行き、「糞が効かない」(リテラル引用)のようなメッセージを残します。 さて...その後、アプリケーションの依存関係からバイナリを更新するプルリクエストを受け取ったとき、それをhammerったり、盲目的に受け入れたりするのではなく、自分の手で再度ビルドして新しいリリースをレイアウトすることは非常に困難です。



覚えておいてください-誰もあなたに何も負いません



私は繰り返します-私の目標は、すべてがどれほど悪いかについて不平を言うことではなく、誰もオープンソースに何も負わないことを思い出させることです。 また、使用するサードパーティコンポーネントのセキュリティを管理する必要があります。 プロジェクトがスピンしている物理サーバーから開始し(「知り合い」であれば、何でも可能です)、前後のコンポーネント、プラグイン、フレームワーク、CMSなどに進みます。 また、最近の記事で提案されているように、「iframeにカードデータを入力する」ことで、世界のすべての問題が解決されるわけではありません。



どうする



安全性を監視する以外に何ができますか? 少なくとも、他の開発者の作業を使用しているという事実について、より責任を持つことができます。 あなたが今積極的に使用しているものをご覧ください。 2年前に壊れたWebストームのライセンスを購入します。 大口注文で使用した、ずる賢く受け取ったテンプレートの費用を支払います。 Webpack開発者向けの自動引き落としを設定します。 このツールを無料で使用するために、コードからコメントを英雄的に削除する方法について、すべてのPVS Studioの投稿を書くのを止めてください。 すでに5ドルをAndroid開発者のKeePassに寄付してください-彼はこれを大きな休日にのみ求めています。



お金がない場合は、問題に移動して問題について話し合うか、プルリクエストを送信します。 エキゾチックな状況で発生したエラーを思い出し、それを繰り返して開発者に説明してください。 何らかのバグを修正したフォークからプルリクエストを行うと、この修正はあなただけに残りました。



開発に参加するお金や機会がない場合は、参加して開発者に「ありがとう」と言ってください。 ご存知のように、あなたはいっぱいになることはありません-しかし、これでさえ開発者を喜ばせ、時には仕事を続けるインセンティブになります。 口頭でのコミュニケーションでは、彼らがあなたに何をしてくれるのかを感謝するのが習慣であるのは驚くべきことです。しかし、このルールがオープンソース開発に適用されることはめったにありません。







ところで、これらのルールは開発だけに適用されるわけではありません。 それをルールにすることもできます-私は急流から読んだ本が好きでした-それを買ってください。 音楽のように-新しいアルバムのクラウドファンディングに参加してください。 それはとても簡単に思えますが、それをする人はほとんどいません。 お互いに助け合いましょう。そうすれば世界は良くなります。 より安全です。



開発者としてできることについては、プロジェクトのサポートを提供する方法をすぐに考えてください。 たぶん、他の開発者を巻き込む方法を理解できるかもしれません。 または、特定の固定価格でのサポートとデバッグ、プロジェクトに基づいたエンタープライズソリューションなどの追加サービスを提供します。 たとえば、ユーザーのサイトでプラグインをサポートするために少なくとも10ドルを費やした場合、おそらく良い収入を得て、プラグインを販売せずに開発を続けることができるでしょう。 多くの人は、プロジェクトの収益化はまずいもので、最初は臭気があると考えていますが、最終的にはプロジェクトに多くの時間を割いて品質を管理することができます。



私はあなたの時間のほとんどを絶対に明白なことを読んで過ごしたことをおizeび申し上げます-その経験は、それらの証拠が彼らのアプリケーションにいかなる形でも影響を与えないことを示しているだけです そして、プラグインを使用したこのケースは、私に多くのことを考えさせました。 あなたも興味を持ち、役に立つことを願っています。



All Articles