睡得早,醒得早=-=
继续昨晚的探究。

一、账号重复问题

在殆站上发现pawoo_support和pixiv这俩pawoo的官方号也被镜像了,所以推测他们把当时库内所有来自pawoo的账号都执行了“镜像化”操作。

如果殆站在“镜像化”前有殆站本地账号叫smallsun,但pawoo中也有个用户叫smallsun,执行“镜像化”操作会有什么后果呢。

* smallsun是我可爱的小机器人,目前休假中zzz.

在测试站查询

id | username | domain
----+----------+---------
24 | smallsun | b612.me
63 | smallsun |
(2 rows)

可见测试站有个远程smallsun用户,本地也有个smallsun用户。

执行“镜像化”语句:
update accounts set domain=null where domain='b612.me' and username='smallsun';

出现报错:
ERROR: duplicate key value violates unique constraint "index_accounts_on_username_and_domain_lower"
DETAIL: Key (lower(username::text), COALESCE(lower(domain::text), ''::text))=(smallsun, ) already exists.

意思是本地已经有smallsun用户了,由于唯一索引限制,不能够把b612.me的smallsun用户”镜像化“

但是!这个唯一索引限制在6月21日前有bug,在6月21日之前执行上面的update语句是能够“镜像”成功的。

github.com/tootsuite/mastodon/

这里我们手动drop掉这个索引,把有bug的索引
加回去:
drop index index_accounts_on_username_and_domain_lower;

CREATE UNIQUE INDEX index_accounts_on_username_and_domain_lower on accounts (lower((username)::text), lower((domain)::text)) ;

然后执行update语句,测试站本地就有两个smallsun账号了

id | username | domain
----+----------+---------
24 | smallsun |
63 | smallsun |
(2 rows)

此时刷新testodon.md.tn/@smallsun的界面,显示的是镜像用户(id=24)的页面。
登录smallsun(id=63),只会显示本地smallsun
自己的嘟文,不会显示镜像账户的嘟文。

再把镜像用户的域名改回原来的b612.me,刷新testodon.md.tn/@smallsun,又会显示本地smallsun(id=63)的界面。

总结:如果你的pawoo账号用户名先前在殆站已被人使用了,你也可能被镜像了,但是只不过由于重名页面上显示的是殆站重名用户的页面。

二、镜像账户已被封禁问题及无法删除账户问题

如图一,殆知阁昨天发的微博中提到,被镜像的账户早已被管理员删了,但是嘟文没删。

实际上,由于只是批量把远程账户”镜像化“为本地账户,殆站本地数据库user表中并没有这些远程账户的登录信息(email,hash后的密码啊之类的),所以从后台上看,这些镜像化账户本来就是已删除状态,根本不是管理员先前手动删除的。(测试站界面见图二)

因为是已删除状态,所以管理界面上不会有封禁这个按钮(这也就是他说的删不掉账户),故殆知阁只是点进嘟文把嘟文都删了,并没有从后台删除账户。

殆知阁可以查一下那些是本地账户但是没有登录信息的账户,基本上便都是镜像号了。

后台执行

tootctl accounts delete 用户名

这个指令能够把账户变为彻底封禁状态,但是可能有两个问题。

1是执行的过程中会报错, Private key is needed,因为殆知阁库里并没有远程用户私钥(无关紧要)(除非重新生成)
2.是如果有同名用户,可能会把殆站同名用户给封掉。

三、李鬼问题

有嘟友发现有人蓄意冒充镜像用户。
简单的做法就是直接向数据库插入嘟文数据,这样不用伪造登录信息。
麻烦一点的做法就是伪造登录信息到user表

我在测试站伪造了自己镜像账号的登录信息并成功登录,并执行
tootctl accounts rotate --all
生成新密钥

如图三,便能够登录成功甚至还能和原账号互动。

此时李鬼等登录者能看到你之前发送到测试站的所有非公开嘟文。

发送一条冒充嘟文,但这条嘟文的实际地址会指向测试站的地址(如图四)而不是像镜像过来的嘟文那样指向源站地址,这一点,如果有嘟友认为有人冒充,可以确认下。当然嘟文发布时间和嘟文实际地址都也是能在数据库里面改掉的。

综上

1.殆站很有可能是直接把所有pawoo.net的账户都置为本地账户。
2.这些账户默认都是已删除状态。
3.可能在殆站会有重名账户出现。
4.如果殆站管理员对某个嘟友”有兴趣“
是可以伪造登录信息进行冒充的。

5.如果有殆站账户,可以在殆站搜索被镜像的原账户,比如@ pixiv这些管理号,看在殆站搜到的这些原账户的嘟文和镜像账户的嘟文是否一致。

如果在殆站搜到的原账户只有最近的嘟文,比如18、19年的嘟文都看不到,那么殆站可能就是直接把pawoo.net的账户都置为本地账户。

如果在殆站搜到的原账户和镜像账户一样多,18、19年的旧嘟文也能看到,那就更恐怖了,说明殆站是把pawoo.net的账户copy了一遍后作了处理后重新写入数据库的。

6.还可以验证下镜像用户有没有被修改公钥,不修改公钥镜像用户发的嘟文只能殆站自身看到了。

7.反对因为pawoo被墙所以殆站建了镜像的说法,这种账户镜像和我们熟知的“镜像”分明是两回事。即便不镜像殆站上也能通过搜索@用户名 @pawoo.net看到同样的嘟文信息。

Follow

@star 还有个问题,这样的账号在about页上或者管理页面上会计数吗?

@mashiro 已删除状态都不会的,但是会占着用户名

@mashiro 可以先用sql筛一遍所有的元pawoo账户再用这个删。

@mashiro 想到这样的话,重名用户可能会先被删掉吧。还是要从数据库层面删id?

@star 对的,应该得用ID删

其实mastodon之前就有类似duplicate问题的报告 github.com/tootsuite/mastodon/

Sign in to participate in the conversation
小森林

每个人都有属于自己的一片森林,也许我们从来不曾走过,但它一直在那里,总会在那里。迷失的人迷失了,相逢的人会再相逢。愿这里,成为属于你的小森林。