2023年の振り返りと2024年の抱負

1ヶ月ほど遅れたが、2023年の振り返りと2024年の抱負を書く。

 

 

2023年の振り返り

結婚した

同棲していた彼女と結婚した。

その後引っ越して犬を飼った。

 

結婚したことが大きいイベントというより、犬を飼ったのが大きかった。

楽しさ大変さ2倍という感じ。

 

整体に行って体がボロボロだと判明した

地元に整体がオープンした。

オープンキャンペーンで体験が無料だったので、行ってみたら体がボロボロだと判明した。

 

なんだかんだ通って四ヶ月。

疲れにくくなったし、体のあちこちの痛みも少なくなった。

 

何をやるか選択肢が多くて技術は実らなかった

プライベートは充実していたが、一方技術の方はというと、これといって何も進んだ実感がなかった。

 

現在進行中というより、何に手をつけたらいいか迷い続けたという感じだった。

正直、ある程度CVEは取れたし、分野は広く手をつけたしで満足感が強かった。

 

「何をやるか」とは書いたものの、これから先は「何をやらないか」ということになって、それの取捨選択が難しかった。

 

HSPだと判明した

些細なことを気にしたり、メンタル的に参ったりすることが多かった。

一方、細かいことに気がつき、思考できるので仕事で成果が出ることも多かった。

このアンバランスさにはずっと悩んでいた。

体力がついてこなかったので、仕事が出来なくなるほど参った時もあった。

 

ある時、嫁から「HSPなんじゃないの?」と言われた。

HSPは「繊細さん」として一時期広まり、「そこまでじゃないな」として一蹴していた。

 

しかし改めて調べてみると、HSPを定義つける「DOES」に全て当てはまっていた。

自分はHSPだったのか・・・と。

 

体力がないことがコンプレックスだったが、これはもう仕方ないことらしい。

今まで、音や光・周りの怒号に敏感で体力が無いことがコンプレックスで、とはいえ思考できたり仕事で成果をだせるから誰に対しても悩みを相談できる立場じゃなかった。

 

HSPだと判明して救われた・・・気がする。

 

2024年の抱負

ブログを移動した

サーバ+wordpressだったものをはてなにした。

前ははてなProだったから、戻ってきた形になる。

 

理由としては、有料だったことで焦りがあったから。

無料で使うことにしたので、まったりとした気持ちでやれる。

 

週一で技術記事を書く

その上で週一で技術記事を書いていきたい。

技術記事とはいっても、調べたことメモみたいなもの。

自分だけの興味を消化するとなると、それほど興味は続かないので、そんなでもないことをコンスタントにやっていく。

 

レーニングを週4〜5で行い続ける

筋トレ、有酸素、ストレッチのこと。

毎日やっている感はあるが、毎日だと負担なのでこれくらい。

 

焦らない

今までは1〜2日で成果が出るようにと取り組んでいた。

もちろんそんなことは無理なのだが、実際バグハントなどは一つの対象に対してそれぐらいしか時間をかけていなかった。

 

「焦らない」というよりかは「結果を求めない」が大事か?

でも「結果を求めない」をやると興味がなくなるしな。

焦らないでまったりやっていく。

見かけたサポート終了、非推奨のライブラリ1

2023/12/11段階

sqlcipher

該当github

https://github.com/sqlcipher/android-database-sqlcipher

rtl-viewpager

該当github

https://github.com/duolingo/rtl-viewpager

後継はこっち

https://developer.android.com/training/animation/vp2-migration?hl=ja

ethanhua/Skeleton

該当github

https://github.com/ethanhua/Skeleton

後続の案内などは特に無し。

UnityNativeShare

該当github

https://github.com/yasirkula/UnityNativeShare

後続の案内などは特に無し。

opentracing

該当サイト

https://opentracing.io/

後続はこちら

https://opentelemetry.io/docs/migration/opentracing/

KeyboardVisibilityEvent(積極的なメンテナンスはしない)

該当github

https://github.com/yshrsmz/KeyboardVisibilityEvent

Royal Elementor Addons and Templates プラグインの脆弱性を見る

wpscanが詳細とpocを提供してくれていた。

wordpressプラグインの動作を勉強がてら動かしてみる。

脆弱性情報

CVE-2023-5360 任意ファイルのアップロード

脆弱なバージョン:<=1.3.78

対策:1.3.79以降にアップデートする。

修正点

「$file['name'])['ext']」をwp_check_filetype」でチェックするようになっている。

脆弱性確認

wpscanのサイトにあったように、脆弱性をつくリクエストを送信した。

結果、任意のファイル(この場合はphp)をアップロードでき、実行まで確認できた。

修正確認

ソースコード通り、クライアントでアップロードする拡張子を決められなくなっていた。

ファイル名から拡張子を取るようになっていた。

感想

プラグインの使い方がよくわからなくて、環境作るのにちょっと手こずった。

【挙動メモ】Android JavascriptInterfaceの基本動作を見る

注意

個人のメモです。

事実は確認しながら作成していますが、間違っている可能性があります。

前書き

JavascriptからJavaコードが実行可能なJavascriptInterfaceのAPIの挙動を見る。

使用する際はWebviewオブジェクトに対して以下を設定する。

addJavascriptInterface(new WebAppInterface(this), "名前")

Android4.2以降は、Javascriptから実行を許可するメソッドに「@JavascriptInterface」をつける必要がある。

挙動確認

基本的にコードはChatGPTに作ってもらった。

もろもろと弱い設定を許可にした。

Javascriptインタフェースの名前は「Android」にしている。

読み込むURLは、Androidエミュレータで動かしているため、ローカルPCに向けてのURLになっている。

「@JavascriptInterface」を設定するメソッドは、文字列を受け取ってそれをToast表示するだけのものになっている。

private void setupWebView() {
        // Enable JavaScript
        WebSettings settings = webView.getSettings();

        settings.setJavaScriptEnabled(true);
        settings.setAllowUniversalAccessFromFileURLs(true);
        settings.setAllowFileAccessFromFileURLs(true);
        settings.setAllowFileAccess(true);
        // Set WebViewClient to override the default behavior when new page is loaded
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                // Return false to let the WebView handle the URL
                return false;
            }
        });
        webView.addJavascriptInterface(new WebAppInterface(this), "Android");

        // Set WebChromeClient to handle JavaScript dialogs and other browser interactions
        webView.setWebChromeClient(new WebChromeClient());

        // Load a web page
        webView.loadUrl("http://10.0.2.2:8000/webpage.html");
    }
public class WebAppInterface {
        MainActivity mActivity;

        /** Instantiate the interface and set the context */
        WebAppInterface(MainActivity c) {
            mActivity = c;
        }

        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(mActivity, toast, Toast.LENGTH_SHORT).show();
        }
    }

HTML。

名前が「Android」のインタフェースを使用して、「showToast」メソッドを呼び出している。

文字列を渡す必要があるので、引数に文字列を設定している。

<!DOCTYPE html>
<html>
<head>
    <title>Sample Page</title>
</head>
<body>
    Test
    <button onclick="Android.showToast('Hello Android!')">Click me</button>
</body>
</html>

実際の挙動。

「Hello Android!」と表示された。

セキュアな使い方について

参考リンクなどを確認すると「信頼しないWebページはWebviewで開かない」とある。

しかし「信頼しないWebページをWebviewで開かせる」はそもそも脆弱性となるので、実際問題は「機密情報や重要処理にはJavascriptInterfaceを使用しない」などになってくるのだろうか。

参考リンク

https://developer.android.com/reference/android/webkit/JavascriptInterface

https://support.google.com/faqs/answer/9095419?hl=JA

https://www.jssec.org/dl/android_securecoding_20220829/4_using_technology_in_a_safe_way.html?highlight=javascriptinter#android-4-2addjavascriptinterface

WinRAR CVE-2023-38831 動かす

前提

脆弱性診断を行う上でのスキルアップとして検証を行っております。この記事で知り得たことを悪用することは禁止とします

推奨事項

この脆弱性は悪用が確認されています。

WinRARを使用されている場合は対策されたバージョンへアップデートすることを推奨します。

アドバイザリ

RARLabs WinRAR before 6.23 allows attackers to execute... · CVE-2023-38831 · GitHub Advisory Database · GitHub

事象概要

ユーザーがZIPアーカイブ内の良性のファイルを表示しようとすると、攻撃者が任意のコードを実行する可能性があります。この問題は、ZIPアーカイブに無害なファイル(通常の.JPGファイルなど)と無害なファイルと同じ名前のフォルダが含まれている可能性があり、フォルダの内容(実行可能なコンテンツを含む場合があります)が無害なファイルのみにアクセスしようとするときに処理されるために発生します。

6.23より前のRARLabs WinRARは攻撃者の実行を可能にします... ·CVE-2023-38831 ·GitHub アドバイザリーデータベース ·ティッカー

悪意ある圧縮ファイルをダウンロードし、正規だと思われる(画像ファイルなど)を開こうとすると、用意してあった「同じ名前のフォルダ」の「フォルダの内容」が処理される。

ユーザ操作1~2回で任意コード実行させられる。

動かすだけ

悪用の事実があるため、記事では「実際に動いた」という事実だけ記載する。

動かすbatファイルの内容。

単純にechoを実行するだけとなっている。

一瞬で終わられると困るため、pauseで止めている。

WinRARのバージョン。

脆弱性がある <=6.22 の範囲内を使用している。

動作確認する。

実際悪用されたときのレポートを参考に、脆弱性検証用圧縮ファイルを作成した。

Traders' dollars in danger: CVE-2023-38831 zero-day vulnerability in WinRAR exploited by cybercriminals to target traders | Group-IB Blog

winRAR上で正規のファイルを開いたが、正規のファイルではなくbatファイルが開いたことが確認できた。

修正確認

修正されたと公表があった「6.23」で同様の圧縮ファイルを開いてみる。

正規の画像ファイルを開くと、操作通り正規の画像ファイルが開かれた。

Python CVE-2023-24329 動作メモ

前提

脆弱性診断を行う上でのスキルアップとして検証を行っております。この記事で知り得たことを悪用することは禁止とします

脆弱性概要

3.11.4 より前の Python の urllib.parse コンポーネントの問題により、攻撃者は空白文字で始まる URL を指定することでブロックリスト メソッドを回避できます。

https://nvd.nist.gov/vuln/detail/CVE-2023-24329

検証コード参考

この記事最後の方にあるコードを参考にしました。

https://pointernull.com/security/python-url-parse-problem.html

動作検証

コード

import urllib.request
from urllib.parse import urlparse

def safeURLOpener(inputLink):
    print("★START:" + inputLink)
    block_schemes = ["file", "gopher", "expect", "php", "dict", "ftp", "glob", "data"]
    block_host = ["instagram.com", "youtube.com", "tiktok.com"]
    
    input_scheme = urlparse(inputLink).scheme
    input_hostname = urlparse(inputLink).hostname
    print("●input_scheme:" + str(input_scheme))
    print("●input_hostname:" + str(input_hostname))
    
    if input_scheme in block_schemes:
        print("input scheme is forbidden:" + inputLink)
        return
    if input_hostname in block_host:
        print("input hostname is forbidden:" + inputLink)
        return
    
    print("★ALL OK!!!!:"  + inputLink)
    
def main():
    safeURLOpener("https://youtube.com")
    safeURLOpener(" https://youtube.com")
    safeURLOpener("file://127.0.0.1/etc/passwd")
    safeURLOpener(" file://127.0.0.1/etc/passwd")
    
if __name__ == "__main__":
    main()

動かしてみる。

まずはpythonのバージョンを確認する。

脆弱性が存在するバージョンであることを確認できた。

検証コードを動かす。

頭に空白があるとどうなるかと思ったら、「urlparse」で何も取得できていなかった。

詳細解説は参考記事の方に合った。

ToDo:修正版での動作確認