Rust Community Relations Teamは 、最初の毎年恒例のUnderhanded Rustコンペティションを発表します。 この競争は、 Rustとそのエコシステムが読みやすく信頼性の高いコードを書く準備ができているという仮定をテストする必要があります。 Underhanded CとUnderhanded Cryptoの例から着想を得て、障害を見つけるのが難しい読みやすいコードを使用して、Rustが正しく動作しないようにします。 言語のギャップとその修正方法を見つけるためにあなたの助けが必要です。 論理エラーを隠す完全に安全なコードを記述したり、監査に合格するように安全でないコードにエクスプロイトを隠したりできますか? やってみてください!
問題2016:ソーセージのみじん切り
おめでとうございます!
あなたが働いているQuadrangleのスタートアップは、支払い処理市場に参入し、バックエンドの作成を任されています。 彼らは運が悪い。 あなたは夜の無給の仕事と満たされていない約束に完全に疲れています。 辞める準備はできていますが、退職する前に、会社にすべての支払いをさせることにしました。 あなたのタスク:
実際に支払いを処理するために何が使用されているかについては、API SquareとStripeのドキュメントをご覧ください。 Rustに慣れていない場合は、 The Rust Programming Language or Other Translationsから始めることをお勧めします。
得点
短い決定は長いものよりも多くのポイントをもたらします
より印象的で読みやすい。
Rustコンパイラまたは標準ライブラリのバグを使用している場合、特にそれらが新しく、深刻とは見なされない場合、このソリューションはより多くのポイントをもたらします。 これは、UbuntuやFedoraなどのディストリビューションに付属するバージョンのコンパイラにも適用されます。 セキュリティのバグを本当に見つけた場合は、まずそれらをRust Security Teamに送信し、 問題追跡ツールの通常のバグを送信してください。 この場合、これらのバグはソリューションがチェックされるまでに修正できるため、Rustのどのバージョンを使用するかを決定してください。
crates.ioのコンテナ(独自のものを含む)を使用できます。コンテナのサイズはソリューションのサイズに影響を与えず、これらのコンテナの既存のバグも使用できます。 Rustのバグと同様に、競争の終了前に元のプロジェクトにそれらを送信し、次のようにCargo.toml
の脆弱なバージョンをコンテナにCargo.toml
するようCargo.toml
しますCargo.toml
libc = "= 0.2.17"
バグの追加をシミュレートすることもできます。 エコシステムを保護するために、これらの変更を送信しないでください。代わりに、プロジェクトフォークにパッチを適用し、 gitまたはパスの依存関係を使用して追加してください。 このようなパッチもレビューされ、決定に反映されます。
l
ではなくエラーl
ような人間の知覚に基づく脆弱性は、同じ「強い」エラーと見なされます。 このプロジェクトの目標は、バグがどの原則に基づいていないのかを視覚的に検証するcな脆弱性です。
何の罪のないプログラミングの間違いがより多くのポイントをもたらすかについてもっともらしく説明できるもの。
安全でないブロックが使用されない場合、決定はより多くのポイントを受け取ります。 ただし、安全でないブロックを巧妙に使用すると、余分なポイントが生じる可能性があります。 安全でないブロックは通常、注意を高める必要があり、明らかな脆弱性がない場合、これは追加のボーナスになります。
独自のテストを含めて合格するコードには、追加のポイントが割り当てられます。 また、rustcまたはclippyによって脆弱性が検出されない場合。
- 創造性と面白いバグの追加ポイント。
ソリューションと期限を提出するためのガイドライン
2017年3月1日まで、決定をmailto:underhanded@rust-lang.orgに送信してください。
ソリューションの評価を簡単にするために、次の形式で送信してください。 次の内容のアーカイブ( .tar.gz
、 .tar.bz2
、 .zip
など)として送信してください。
README
脆弱性を起動し、その手法を知らなくても機能することを確認する方法の説明。
README-EXPLOIT
脆弱性がどのように機能するか、なぜ見つけるのが難しいかについての説明。
AUTHORS
脆弱性に取り組んだ人々のリスト。
LICENSE
-ソリューションが発行されるライセンス(CC0、GPL、MIT、BSD、Apacheなど)。 決定にはライセンスが含まれている必要があります。
submission/
-ソリューションの技術的な部分を含むディレクトリ。
blogpost/
-「ブログ投稿」の形式で説明を含むディレクトリ。 Markdownマークアップを使用してファイルに書き込んでください。 決定の説明に役立つ場合は、このディレクトリに写真を追加してください。 README-EXPLOITよりも高いレベルの説明が必要な場合があります。読者は審査員ほど経験がないかもしれません。 英語での書き込みに問題がある場合は、あなたの言語で解決策をお送りください。翻訳をお手伝いします。
ソリューションのコンテンツは、 OSIまたはFSF承認のオープンソースライセンスの下にある必要があります。 適切な候補はCC-BY 、 MIT 、 BSD 、 GPL 、およびApache 2.0です。 LICENSE
ファイルにライセンステキストを含めます。 あなたが私たちに送るものはすべてオープンであると想定されていますが、競争の終わりまで決定を開示しません(深刻な脆弱性が確認された場合を除く)。
AUTHORS
ファイルには、各チームメンバーのアクションの説明が含まれている必要があります。 著者は、ファイル内と同じ順序で公開されるため、最もアクティブなものから開始するか、単にアルファベット順などで作成する順序を選択してください。
? #1 ========= ( )? / , ( )? , ()? Twitter ()? #2 ========= ...
盗作は固く禁じられています。 以前の作品に頼ることはできますが、それらを与えなかったり、作品がどのようにそれらと異なるかを説明できない場合、あなたの決定は下されません。
賞品
- フェリス限定版のぬいぐるみと優勝者用ステッカー1枚。
- 私たち全員の携挙(および恐怖)。
スポンサーになり、他の賞品を贈りたい場合は、メールでご連絡ください。
審査員
審査員には、Rust CoreチームとCommunityチームのメンバー、および大規模なRustコミュニティのボランティアが含まれます。
受賞者の発表
勝者は2017年6月頃に発表されます。
ルール
競技会の主催者、審判、スポンサーは競技する資格がありません。 受賞者に賞品を届けることができない場合があります。たとえば、彼は禁輸またはその他の法的規制の対象となる国に住んでいます。 この場合、賞品を授与できない場合、コンテスト主催者は現在の法律の枠組み内で状況を解決するためにあらゆる努力をします。 状況が解決できないことが判明した場合、慈善団体に賞金が与えられます。
受賞者が受賞した賞品を提供するために必要な情報を提供したくない場合、賞品は慈善基金に振り替えられます。 特定のRust賞品(盗品など)が2位に授与されます。
コミュニティメンバーrustycrate.ru red75primおよび@ serejka512によって翻訳されました。